+2007-05-06 14:43 UTC Tuomo Valkonen <tuomov@iki.fi>
+ tagged ion-3rc-20070506
+
+2007-05-06 14:43 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Oops
+
+2007-05-06 14:38 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Doc comment fix
+
+2007-05-06 14:31 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * predist.sh support for specifying additional repository base path
+
+2007-05-06 14:26 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Release notes date
+
+2007-05-06 14:23 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed mod_mgmtmode.
+ As it is not quite finished, it does not belong in the "stable" Ion3.
+ It will be distributed separately.
+
+2007-05-06 14:19 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Some more name policy clarifications
+
+2007-05-06 13:55 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Made the scrachpad (scratchws) pseudomodal.
+ (This will only take effect when a new scratchpad is created.)
+
+2007-05-06 13:54 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added back pseudomodal option for regions managed by WMPlexes.
+
+2007-05-06 13:12 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Stacking list traversal improvements
+
+2007-05-06 11:27 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed redundant code
+
+2007-05-05 19:04 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Doc fix
+
+2007-05-05 17:36 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Update notify window when name of window with activity changes.
+
+2007-05-05 16:44 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * *sigh*
+
+2007-05-04 21:34 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Display tab numbers on modifier release.
+ Seems to work better than delayed display.
+
+2007-05-04 21:34 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Simplified ioncore.tabnum interface.
+
+2007-05-04 21:29 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added submat_wait called on modifier release.
+
+2007-05-04 16:10 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Increased default tab numbers display delay to 250ms
+
+2007-05-04 15:57 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Draw tab numbers on right, unless tab text alignment is right.
+
+2007-05-04 15:53 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added automatically displayed tab numbers.
+ The functions in `ioncore.tabnum` can be used to display
+ tab numbers on a frame after a specified delay, and clear
+ them when the submap grab is released.
+
+2007-05-04 15:41 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added submap enter events and ungrab hook
+
+2007-05-04 15:36 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Fixed defer to allow NULL parameters
+
+2007-05-04 06:50 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Name policy refinements
+
+2007-05-03 23:58 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed useless property setting special case.
+
+2007-05-03 16:31 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Oops.
+
+2007-05-02 22:06 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Some watches weren't being initialised
+
+2007-05-02 21:59 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Release notes updates
+
+2007-05-02 21:43 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed obsoleted and redundant WFrame.set_numbers.
+ (Didn't I do this already?)
+
+2007-05-02 18:50 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Store the region pointer in a Watch in binding handler.
+ It might get destroyed.
+
+2007-05-01 14:12 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Drawing engine extras table storage improvements.
+ Copy only unknown values, thus freeing memory. Append
+ to replaced style's table.
+
+2007-05-01 12:31 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added "userattr1" for frames to stock styles.
+ This could be used by e.g. a "place new windows here" script,
+ via `WFrame.set_grattr`. (Of course, arbitrary attributes may
+ be defined and used, but this is one that all stock styles at
+ least are bound to define.)
+
+2007-05-01 11:55 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Documentation fixes and style clean up
+
+2007-05-01 11:05 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Quasiactivate frames for detachs from groups within them too.
+
+2007-04-30 18:31 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * More based_on fixes.
+ (Still missing copying/appending of data_table.)
+
+2007-04-30 17:59 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Detach stacking level fix
+
+2007-04-30 17:51 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Oops, size hints fixing had broken unsqueeze
+
+2007-04-29 10:47 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Style file border tuning
+
+2007-04-29 10:47 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Drawing engine border calculation tuning
+
+2007-04-29 10:26 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Style file tuning
+
+2007-04-29 10:23 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added special "inherit" colour value.
+ This is needed in common style templates to not override padding_colour
+ with background_colour, as if padding_colour isn't set, it is set to
+ background_colour.
+
+2007-04-28 19:56 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Support based_on too after all
+
+2007-04-28 18:06 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Use based_on's based_on
+
+2007-04-27 23:57 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed based_on fields from style files
+
+2007-04-27 23:45 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Changes in de.defstyle
+ The based_on field is no longer used. Instead, the style is
+ based on the existing best-matching style. Thus the function
+ also amends to existing exactly matching style, instead of
+ redefining it.
+
+2007-04-27 21:58 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added name policy notice
+
+2007-04-27 21:50 UTC Tuomo Valkonen <tuomov@iki.fi>
+ tagged pre-namepolicy-notice
+
+2007-04-27 16:06 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed note of removed autoconf script from README
+
+2007-04-27 15:15 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Changed license header in source files
+
+2007-04-25 13:34 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Release notes draft
+
+2007-04-24 23:53 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Fixed dockapp hack with those few that actually have WM_CLASS.
+
+2007-04-24 14:25 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added green tabnumber substyle to tab-frame styles.
+ (Tab numbering can be toggled/set/unset with
+ `frame:set_grattr('numbers', 'toggle')` etc.)
+
+2007-04-24 14:23 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Fixes and improvements to previously blind-written code.
+
+2007-04-24 11:08 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added WFrame.set_grattr/WFrame.is_grattr
+
+2007-04-24 11:38 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added numbering hack to drawing engine
+
+2007-04-24 11:23 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Drawing engine attribute matching improvements
+
+2007-04-24 11:22 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Oops, const
+
+2007-04-24 11:08 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added gr_stylespec_isset
+
+2007-04-24 10:02 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Store current frame base style in WFrame.baseattr
+ instead of reconstructing it all the time.
+
+2007-04-24 09:08 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed unused setting from config.h
+
+2007-04-23 23:26 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Fixed size hints ICCCM compliance degradation + code clean-up
+
+2007-04-23 23:01 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Improved dockapp winprop support hack.
+ Copy WM_CLASS from the (undisplayed) main window as _ION_DOCKAPP_HACK
+ property on the (displayed) icon window. Have WClientWin.get_ident
+ then report this information as `class` and `instance` for the dockapp
+ window, so that winprop matching code can use it.
+
+2007-04-22 18:10 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Place dockapps in the statusbar's systray.
+ (Added winprop in default `cfg_kludges.lua`.)
+
+2007-04-22 18:07 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed possibly obsolete Galeon winprop.
+ (Isn't the browser also dead already? Downwards slide started at Gnome 2.0.)
+
+2007-04-22 18:02 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Ugly hack for dockapp winprop support.
+ We save the dockapp state ourselves over restarts to get the right
+ winprop after that, because the way windows are loaded after restart,
+ the dockapp state would not be easily available otherwise. In addition,
+ dockapps usually don't have any class/role/instance identification
+ information in the dockapp (icon) window, so this method can not
+ be used -- easily. Some dockapps would function fine with us simply
+ using the main window instead of the icon window as specified by
+ the dockapp protocol, and this would provide better winprop support,
+ but then other dockapps don't display anything meaningful in the
+ main window, that the expect not to be shown. Hence this ugly hack
+ for at least basic all-dockapps winprop matching. For better matching
+ dockapps should preferrably be able to start normally, as `asclock`
+ can do (an does by default), instead of the "withdrawn" mode.
+
+2007-04-22 15:11 UTC Miroslav Kure <kurem@debian.cz>
+ * Updated Czech translation
+
+2007-04-22 10:16 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Updated Finnish translation
+
+2007-04-22 10:10 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Man page tuning
+
+2007-04-22 09:58 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Man page binding documentation extraction script improvements.
+ (To generate better PWM man pages.)
+
+2007-04-22 09:58 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed duplicate Mod1+T binding
+
+2007-04-22 09:13 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Updates to PWM config file
+
+2007-04-22 00:33 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed ru translation, as it has not been updated as requested.
+
+2007-04-22 00:32 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Remove de translation, as it has not been updated as requested.
+
+2007-04-22 00:32 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed de and ru from translations to build
+ (to allow separately rolling back other removals to be recorded).
+
+2007-04-22 00:23 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed autoconf shit.
+ Since I will have nothing to do with that shit, and nobody else
+ seems to maintain or support it either, it has no place here.
+
+2007-04-21 17:23 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Changes in prepare_manage to cope with nested workspaces.
+ A priority parameter is passed instead of just a redirection
+ hint, which was poorly utilised anyway.
+
+2007-04-20 16:30 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added is_transient field to WClientWin.get_ident and for winprop matching.
+
+2007-04-20 16:30 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed unused transient_for field from WClientWin
+
+2007-04-20 16:09 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added look_greenlight
+
+2007-04-20 16:07 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Hmm...
+
+2007-04-09 09:42 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added commented-out bindings for plain-old-menus in cfg_ion.lua
+
+2007-04-08 12:37 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Ref. to size policy section etc.
+
+2007-04-08 12:18 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Use strings instead of numeric size policies
+
+2007-04-06 11:29 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Docs from $(LUA_SOURCES) too..
+
+2007-04-06 11:18 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added exports.tex make rule
+
+2007-04-06 11:00 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Added padding to default look's transient style
+
+2007-04-05 16:30 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Fixed documentation mixup
+
+2007-04-05 16:27 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Statusbar documetnation improvements
+
+2007-04-03 15:41 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Updated Finnish translation
+
+2007-04-03 15:23 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Tiling navigation code changes and semi-fixes
+
+2007-03-31 21:04 UTC Miroslav Kure <kurem@debian.cz>
+ * Updated Czech translation
+
+2007-03-31 14:20 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Redirect frame placeholders in frame_rescue_clientwins.
+ Dispose code changes had disabled the creation of a frame
+ recreation placeholder.
+
+2007-03-29 21:39 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Unsqueeze includes base size hint
+
+2007-03-29 21:35 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Put the scratchpad in the group *scratchws*
+
+2007-03-29 21:34 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * WGroup attach only switches to floating mode frames in tiled mode
+ (and not those in unknown or transient mode).
+
+2007-03-29 21:33 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Detach stacks one level above source now
+
+2007-03-29 17:12 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Don't override "level" by "bottom" in WGroup.attach
+
+2007-03-29 16:00 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Move tiled transient handling from tiling code to frame code
+ (check by frame mode). This is the place to get correct behaviour
+ on a more complex scratchpad configuration.
+
+2007-03-28 18:19 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Context menu generation changes.
+ The `ctxmenu` menu generator automatically uses WGroup.bottom, so that
+ it suffices to pass _sub instead of _chld to the menu functions. This
+ should fix tab drop-down menus.
+
+2007-03-25 11:53 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * region_may_control_focus policy change.
+ The focus may be controlled, if a manager is about to be given
+ the focus (which makes sense, since we have not requested focus
+ within a particular region within it). This fixes unsqueeze focus
+ issues.
+
+2007-03-20 11:35 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Export name fix
+
+2007-03-19 19:02 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed redundant MPLEX_ATTACH_MODAL parameter
+
+2007-03-19 18:57 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Menus and queries use STACKING_LEVEL_MODAL1+1.
+ This is to not let transients steal the focus.
+
+2007-03-19 18:37 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Oops, return in wrong place in fs rq check was breaking other cfgrqs
+
+2007-03-19 18:19 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Unsqueeze infinite loop fix
+
2007-03-18 20:31 UTC Tuomo Valkonen <tuomov@iki.fi>
tagged ion-3ds-20070318
+Copyright (c) Tuomo Valkonen 1999-2007.
+
+The code of this project is "essentially" licensed under the LGPL, version
+2.1, unless otherwise indicated in components taken from elsewhere. It is
+reproduced below. Additionally, the following terms apply to the use of
+the names Ion, Ion3, and other derived names:
+
+ Derived works and altered versions that significantly differ from the
+ original copyright holder's versions, must either a) be given names
+ that can not be associated with the "Ion" project, or b) be qualified
+ as "Ion soup", and still be considerable as customised versions of this
+ software. In both cases, executables must also be given names that do
+ not conflict with the original copyright holder's version, and the
+ copyright holder may not be referred to for support.
+
+ Modules and other (standalone) extensions to Ion must also be named
+ so that they can not be confused to be supported by the copyright
+ holder. If "Ion" occurs in the name, it must be in the form
+ "Foo for Ion" instead of "Ion Foo", etc.
+
+ If the name of the project (Ion), resp. names of particular branches
+ (Ion1, Ion2, Ion3, etc.), are used without further prominent version
+ qualifiers and notices of possible out-datedness to distribute this
+ software, then the following conditions must hold: a) The version
+ distributed online may not significantly differ from the copyright
+ holder's latest release marked stable, resp. latest release on a
+ branch, within a reasonable delay (normally 28 days) from the release.
+ b) The holders of physical distribution media are provided ways to
+ upgrade to the latest release within this same delay.
+
+ This name policy notice may not be altered, and must be included in
+ any altered versions and binary redistributions. It may only be
+ removed when using small portions of the code in unrelated projects.
+
+ The copyright holder and the Ion project retain the same rights to
+ your modifications that it would have under the LGPL or GPL without
+ these or similar additional terms.
+
+Explanations:
+
+Significant change: Bug fixes are a priori insignificant as additions.
+Basic changes that are needed to install or run the software on a target
+platform are a priori insignificant. Additionally, basic configuration
+changes to better integrate the software with the target platform,
+without obstructing the standard behaviour, are a priori insignificant.
+The copyright holder, however, reserves the right to refine the
+definition of significant changes on a per-case basis. Please consult
+when in doubt.
+
+Distributions: For example, suppose an aggregate distribution of software
+provides a `installpkg` command for installing packages. Then the action
+`installpkg ion3` (resp. `installpkg ion`) should always install the
+latest release of Ion3 (resp. the latest stable release), online
+connectivity provided. The action `installpkg ion-3ds-20070318` may
+at any date install this particular mentioned release. Likewise
+`installpkg ion-soup` may install any non-conflicting customised
+version.
+
+---
+
+
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
-^L
+\f
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
-^L
+\f
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
-^L
+\f
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
-^L
+\f
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
-^L
+\f
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
-^L
+\f
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
-^L
+\f
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
DAMAGES.
END OF TERMS AND CONDITIONS
-^L
+\f
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
* GNU make
* Lua 5.1 (see <http://www.lua.org/>).
-2. a) Edit `system.mk` to suit your system. Most GNU/Linux users should
- need very few changes.
-
- b) Alternatively, go to the directory `build/ac`, run `autoreconf`
- and then `./configure`. Switch back to the top lvel directory
- afterwards. See `build/ac/README.autoconf` for details on parameters,
- especially if you are using the Debian Lua packages. If you try
- this method and it fails for some reason, please make sure
- `build/ac/system-ac.mk` does not exist before falling back to
- alternative a). Also in such a case, find someone else to complain
- to: I (tuomov) will have nothing to do with autoconf.
+2. Edit `system.mk` to suit your system. Most GNU/Linux users should
+ need very few changes.
3. If you want to build some extra modules now or do not want to build
some of the standard modules, edit `modulelist.mk`.
Ion was written by Tuomo Valkonen.
-The autoconf script written by Tom Payne for the most part.
-
The dock module was written by Tom Payne and Per Olofsson.
`utils/ion-completefile/ion-completefile.c` is based on editline, (c)
+ion-3rc-20070506
+----------------
+
+This is the first "rc" or "(stable) release candidate" release of
+Ion3. This means that there will not be any further major changes
+to it. Bugs will be fixed, and as an exception to the general
+feature freeze, some hooks may still be added, if deemed useful.
+Translations may also be included. After no new bugs (that can not
+be deemed features) have been found in this or following "rc"
+releases, the stable Ion3 will be released.
+
+Most of the changes in this release to the previous one already
+are bug fixes, in addition to some general clean-up. Other notable
+changes are:
+
+ * Winprop matching improvements: it is possible to match against
+ `is_dockapp` and `is_transient` (booleans), and there's a hack
+ to support `class` and `instance` for dockapps too.
+
+ * The default configuration puts dockapps in the statusbar's
+ tray area.
+
+ * The autoconf kludge has been removed, as I will have nothing
+ to do with it, and nobody else seems to support or maintain
+ it either.
+
+ * Tab numbers are displayed when releasing modifiers in the
+ `Mod1+K` submap.
+
+Distributors should pay heed to the name policy notice in the
+LICENSE file.
+
+
ion-3ds-20070318
----------------
Better support for the few applicable EWMH hints
-From background-static Thu Mar 23 17:52:17 EET 2006
-Message-Id: <riot.20060323175217.6@riot.invalid>
-Date: Thu Mar 23 17:52:17 EET 2006
-Status: RO
-X-Riot-Version: 1ds-yyyymmdd
-From: Riot
-X-Riot-Edited: Sat Apr 22 19:08:23 EEST 2006
-Content-Type: text/plain; charset=utf-8
-Subject: Numbered tabs
-In-Reply-To: <riot.20060323180800.34@riot.invalid>
-
-Numbered tabs
-
-Either togglable, or perhaps the numbers should be shown when
-a prefix of the key combo to switch tabs has been entered.
-The latter will be quite more complicated to implement.
-
-Done: basic toggleable numbering.
-
From background-static Thu Mar 23 18:00:25 EET 2006
Message-Id: <riot.20060323180025.17@riot.invalid>
Date: Thu Mar 23 18:00:25 EET 2006
Done
+From background-static Thu Mar 23 17:52:17 EET 2006
+Message-Id: <riot.20060323175217.6@riot.invalid>
+Date: Thu Mar 23 17:52:17 EET 2006
+Status: RO
+X-Riot-Version: 1ds-yyyymmdd
+From: Riot
+X-Riot-Edited: Sat Apr 22 19:08:23 EEST 2006
+Content-Type: text/plain; charset=utf-8
+Subject: Numbered tabs
+In-Reply-To: <riot.20060323173244.4@riot.invalid>
+
+Numbered tabs
+
+Either togglable, or perhaps the numbers should be shown when
+a prefix of the key combo to switch tabs has been entered.
+The latter will be quite more complicated to implement.
+
+Done: basic toggleable numbering.
+
From background-static Thu Mar 23 17:40:03 EET 2006
Message-Id: <riot.20060323174003.7@riot.invalid>
Date: Thu Mar 23 17:40:03 EET 2006
+++ /dev/null
-
-Ion autoconf script README
-
-
-CONFIGURE SCRIPT OPTIONS
-
-The Ion-specific options to ./configure are:
-
- --disable-xinerama
- --disable-xfree86-textprop-bug-workaround
- --enable-Xutf8
- --disable-shared
- --with-lua* (see DEBIAN NOTES below)
- --enable-c99-source
- --enable-xopen-source
- --disable-locale
- --enable-sun-f1x-remap
-
-Run ./configure --help for more information on these options. The
-defaults are chosen to generate a configuration very similar to the
-Ion default.
-
-
-DEBIAN NOTES
-
-If you are using the Lua 5.1 package on Debian then use
-
- ./configure --with-lua-suffix=5.1 \
- --with-lua-includes=/usr/include/lua5.1
-
-This will allow the script to find the Lua headers, binaries and
-libraries as renamed and located on Debian.
-
-
-CYGWIN NOTES
-
-Under Cygwin you must use statically linked modules:
-
- ./configure --disabled-shared
-
-
-AUTHORS
-
-Tom Payne <ion@tompayne.org>
-
+++ /dev/null
-
-dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
-dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
-dnl also defines GSTUFF_PKG_ERRORS on error
-AC_DEFUN(PKG_CHECK_MODULES, [
- succeeded=no
-
- if test -z "$PKG_CONFIG"; then
- AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
- fi
-
- if test "$PKG_CONFIG" = "no" ; then
- echo "*** The pkg-config script could not be found. Make sure it is"
- echo "*** in your path, or set the PKG_CONFIG environment variable"
- echo "*** to the full path to pkg-config."
- echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
- else
- PKG_CONFIG_MIN_VERSION=0.9.0
- if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
- AC_MSG_CHECKING(for $2)
-
- if $PKG_CONFIG --exists "$2" ; then
- AC_MSG_RESULT(yes)
- succeeded=yes
-
- AC_MSG_CHECKING($1_CFLAGS)
- $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
- AC_MSG_RESULT($$1_CFLAGS)
-
- AC_MSG_CHECKING($1_LIBS)
- $1_LIBS=`$PKG_CONFIG --libs "$2"`
- AC_MSG_RESULT($$1_LIBS)
- else
- $1_CFLAGS=""
- $1_LIBS=""
- ## If we have a custom action on failure, don't print errors, but
- ## do set a variable so people can do so.
- $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
- ifelse([$4], ,echo $$1_PKG_ERRORS,)
- fi
-
- AC_SUBST($1_CFLAGS)
- AC_SUBST($1_LIBS)
- else
- echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
- echo "*** See http://www.freedesktop.org/software/pkgconfig"
- fi
- fi
-
- if test $succeeded = yes; then
- ifelse([$3], , :, [$3])
- else
- ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
- fi
-])
-
-
+++ /dev/null
-dnl Process this file with autoconf to produce a configure script.
-dnl Please report bugs in this autoconf script Tom Payne <ion@tompayne.org>
-dnl $Header: /home/twp/cvsroot/twp/ion/ion-devel-autoconf/configure.ac,v 1.16 2004/01/14 11:32:19 twp Exp $
-
-AC_INIT([Ion Window Manager],
- [3ds-20070318],
- [nobody@nowhere.invalid],
- [ion3])
-AC_PREREQ([2.58])
-AC_REVISION([$Revision: 1.16 $])
-
-dnl Checks for programs. {{{
-AC_PROG_CC()
-AC_PROG_EGREP()
-AC_PROG_INSTALL()
-AC_PROG_RANLIB()
-AC_CHECK_TOOL([STRIP], [strip], [:])
-AC_CHECK_TOOL([AR], [ar], [])
-AC_CHECK_PROG(XMESSAGE, xmessage, xmessage)
-if test "x${XMESSAGE}" = "x"; then
- AC_MSG_WARN([*** ion needs xmessage to run correctly])
-fi
-dnl }}}
-
-dnl Checks for libraries. {{{
-AC_PATH_XTRA()
-AC_CHECK_HEADER([libintl.h], [],
- [AC_MSG_ERROR([*** libintl.h not found.
- *** You probably need to install libc6-dev])])
-dnl Perhaps we should check for -lintl, but on my machine,
-dnl the library isn't needed. Only the #include is necessary.
-
-test "${X_DISPLAY_MISSING+set}" = set && exit 1
-AC_CHECK_HEADER([X11/SM/SMlib.h], [],
- [AC_MSG_ERROR([*** SMlib.h not found.
- *** You probably need to install libsm-dev])])
-AC_CHECK_HEADER([X11/Xresource.h], [],
- [AC_MSG_ERROR([*** Xresource.h.h not found.
- *** You probably need to install libx11-dev])])
-AC_CHECK_LIB([Xext],
- [XMissingExtension],
- [X_LIBS="$X_LIBS -lXext"],
- [AC_MSG_ERROR([*** Missing symbol XMissingExtension in Xext])],
- [$X_PRE_LIBS -lX11 $X_LIBS $X_EXTRA_LIBS])
-dnl }}}
-
-dnl XINERAMA_LIBS, _DCF_NO_XINERAMA {{{
-
-AC_SUBST([XINERAMA_LIBS])
-AC_SUBST([_DCF_NO_XINERAMA])
-
-AC_ARG_ENABLE([xinerama],
- [AS_HELP_STRING([--disable-xinerama],
- [Disable Xinerama support])])
-
-if test "x$enable_xinerama" != xno; then
- AC_CHECK_LIB([Xinerama],
- [XineramaQueryExtension],
- [XINERAMA_LIBS="-lXinerama"],
- [AC_MSG_WARN([*** Xinerama disabled (not available)])
- enable_xinerama="no"],
- [$X_PRE_LIBS -lX11 $X_LIBS $X_EXTRA_LIBS])
-
-fi
-
-if test "x$enable_xinerama" = xno; then
- _DCF_NO_XINERAMA="-DCF_NO_XINERAMA"
-fi
-
-dnl }}}
-
-dnl _DCF_XFREE86_TEXTPROP_BUG_WORKAROUND {{{
-
-AC_SUBST([_DCF_XFREE86_TEXTPROP_BUG_WORKAROUND])
-
-AC_ARG_ENABLE([xfree86-textprop-bug-workaround],
- [AS_HELP_STRING([--disable-xfree86-textprop-bug-workaround],
- [Disable the XFree86 textprop bug workaround])])
-
-if test "x$enable_xfree86_textprop_bug_workaround" != xno; then
- _DCF_XFREE86_TEXTPROP_BUG_WORKAROUND="-DCF_XFREE86_TEXTPROP_BUG_WORKAROUND"
-fi
-
-dnl }}}
-
-dnl _DCF_DE_USE_XUTF8 {{{
-
-AC_SUBST([_DCF_DE_USE_XUTF8])
-
-AC_ARG_ENABLE([Xutf8],
- [AS_HELP_STRING([--enable-Xutf8],
- [Use the Xutf8 routines (XFree86 extension)
- instead of Xmb routines in an UTF-8 locale.])])
-
-if test "x$enable_Xutf8" = xyes; then
- AC_MSG_CHECKING([for Xutf8*])
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $X_CFLAGS"
- AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <X11/Xlib.h>
-
-int main()
-{
-#ifdef X_HAVE_UTF8_STRING
- exit(0);
-#else
- exit(1);
-#endif
-}
- ]])],
- [AC_MSG_RESULT([yes])
- _DCF_DE_USE_XUTF8="-DCF_DE_USE_XUTF8"],
- [AC_MSG_RESULT([no])
- exit 1])
- CFLAGS="$save_CFLAGS"
-fi
-
-dnl }}}
-
-dnl _DCF_SUN_F1X_REMAP {{{
-
-AC_SUBST([_DCF_SUN_F1X_REMAP])
-
-AC_ARG_ENABLE([sun-f1x-remap],
- [AS_HELP_STRING([--enable-sun-f1x-remap],
- [Remap F11 key to SunF36 and F12 to SunF37])])
-
-if test "x$enable_sun_f1x_remap" == xyes; then
- _DCF_SUN_F1X_REMAP="-DCF_SUN_F1X_REMAP"
-fi
-
-dnl }}}
-
-dnl DL_LIBS {{{
-
-AC_SUBST([DL_LIBS])
-
-AC_CHECK_HEADER([dlfcn.h], [], [AC_MSG_ERROR([*** missing header dlfcn.h])])
-AC_CHECK_LIB([dl], [dlopen], [DL_LIBS="-ldl"],
- [AC_MSG_ERROR([*** missing library dl])])
-
-dnl }}}
-
-dnl PRELOAD_MODULES {{{
-
-AC_SUBST(PRELOAD_MODULES)
-
-AC_ARG_ENABLE([shared],
- [AS_HELP_STRING([--disable-shared],
- [Do not dynamically load modules (preload modules
- instead)])])
-
-if test "x$enable_shared" = xno; then
- PRELOAD_MODULES="1"
-fi
-
-dnl }}}
-
-dnl LUA, LUAC, LUA_INCLUDES, LUA_LIBS {{{
-
-AC_SUBST([LUA])
-AC_SUBST([LUAC])
-AC_SUBST([LUA_INCLUDES])
-AC_SUBST([LUA_LIBS])
-
-dnl Arguments {{{
-AC_ARG_WITH([lua-prefix],
- [AS_HELP_STRING([--with-lua-prefix=DIR],
- [Lua files are in DIR])])
-AC_ARG_WITH([lua-includes],
- [AS_HELP_STRING([--with-lua-includes=DIR],
- [Lua include files are in DIR])])
-AC_ARG_WITH([lua-libraries],
- [AS_HELP_STRING([--with-lua-libraries=DIR],
- [Lua library files are in DIR])])
-AC_ARG_WITH([lua-suffix],
- [AS_HELP_STRING([--with-lua-suffix=ARG],
- [Lua binary and library files are suffixed with
- ARG])])
-dnl }}}
-
-dnl LUA {{{
-if test "x$with_lua_prefix" = x; then
- lua_search_path="$PATH"
-else
- lua_search_path="$with_lua_prefix/bin"
-fi
-if test "x$LUA" = x; then
- AC_PATH_PROG([LUA], [lua$with_lua_suffix], [], [$lua_search_path])
- test "x$LUA" = x && AC_MSG_ERROR([*** Can't build ion without lua])
-fi
-dnl }}}
-
-dnl lua_version {{{
-AC_MSG_CHECKING([for lua version >= 5.1])
-lua_version=$($LUA -v 2>&1 | head -n 1 | cut -d' ' -f2)
-dnl lua_version=$($LUA -v 2>&1 >/dev/null | head -n 1 | $EGREP -o '[0-9]+(\.[0-9]+)+')
-case $lua_version in
-0.* | 1.* | 2.* | 3.* | 4.* | 5.0)
- AC_MSG_RESULT([no (found $lua_version)])
- AC_MSG_ERROR([*** can't build ion with this version of lua])
- ;;
-*)
- AC_MSG_RESULT([yes (found $lua_version)])
- ;;
-esac
-dnl }}}
-
-dnl LUAC {{{
-if test "x$LUAC" = x; then
- AC_PATH_PROG([LUAC], [luac$with_lua_suffix], [], [$lua_search_path])
- test "x$LUAC" = x && exit 1
-fi
-dnl }}}
-
-dnl luac_version {{{
-AC_MSG_CHECKING([for lua version = luac version])
-luac_version=$($LUAC -v 2>&1 | head -n 1 | cut -d' ' -f2)
-if test "x$lua_version" = "x$luac_version"; then
- AC_MSG_RESULT([yes (found $luac_version)])
-else
- AC_MSG_RESULT([no (found $luac_version)])
- exit 1
-fi
-dnl }}}
-
-dnl LUA_INCLUDES {{{
-if test "x$with_lua_includes" != x; then
- LUA_INCLUDES="-I$with_lua_includes"
-elif test "x$with_lua_prefix" != x; then
- LUA_INCLUDES="-I$with_lua_prefix/include"
-fi
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $LUA_INCLUDES"
-AC_CHECK_HEADERS([lua.h lualib.h], [],
- [AC_MSG_ERROR([*** missing headers lua.h or lualib.h.
- *** install the lua's -dev package or check --with-lua-includes option.])], [])
-CFLAGS="$save_CFLAGS"
-dnl }}}
-
-dnl LUA_LIBS {{{
-if test "x$with_lua_libraries" != x; then
- LUA_LIBS="-L$with_lua_libraries"
-elif test "x$with_lua_prefix" != x; then
- LUA_LIBS="-L$with_lua_prefix/lib"
-fi
-AC_CHECK_LIB([m], [exp], [lua_extra_libs="$lua_extra_libs -lm"], [])
-AC_CHECK_LIB([dl], [dlopen], [lua_extra_libs="$lua_extra_libs -ldl"], [])
-AC_CHECK_LIB([lua$with_lua_suffix],
- [lua_call],
- [LUA_LIBS="$LUA_LIBS -llua$with_lua_suffix $lua_extra_libs"],
- [AC_MSG_ERROR([*** Can't find lua_call in lua$with_lua_suffix.
- *** Check for liblua installation or --with-lua-libraries or --with-lua-suffix options])],
- [$LUA_LIBS $lua_extra_libs])
-dnl }}}
-
-dnl liblua_version {{{
-AC_MSG_CHECKING([for liblua version >= 5.1])
-save_CFLAGS="$CFLAGS"
-save_LIBS="$LIBS"
-CFLAGS="$CFLAGS $LUA_INCLUDES"
-LIBS="$LIBS $LUA_LIBS"
-AC_RUN_IFELSE([AC_LANG_SOURCE([[
-
-#include <lua.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-int main()
-{
- printf("(found %s, %d)... ", LUA_VERSION, LUA_VERSION_NUM);
- if(LUA_VERSION_NUM >= 501)
- exit(EXIT_SUCCESS);
- exit(EXIT_FAILURE);
-}
-
-]])],
- [AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])
- exit 1])
-CFLAGS="$save_CFLAGS"
-LIBS="$save_LIBS"
-dnl }}}
-
-dnl }}}
-
-dnl HAS_SYSTEM_ASPRINTF {{{
-
-AC_SUBST([HAS_SYSTEM_ASPRINTF])
-
-AC_CHECK_FUNC([asprintf],
- [AC_CHECK_FUNC([vasprintf],
- [HAS_SYSTEM_ASPRINTF="1"])])
-
-dnl }}}
-
-dnl XOPEN_SOURCE {{{
-
-AC_SUBST([XOPEN_SOURCE])
-
-AC_ARG_ENABLE([xopen-source],
- [AS_HELP_STRING([--enable-xopen-source],
- [Enable X/Open C flags (development use only)])])
-
-if test "x$enable_xopen_source" = xyes; then
- AC_MSG_CHECKING([for $CC flags to accept X/Open C])
- case $host in
- # FIXME: what flags are required for other hosts/compilers?
- *-*-solaris* | *-*-sunos*)
- XOPEN_SOURCE="-D__EXTENSIONS__"
- ;;
- *)
- XOPEN_SOURCE="-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED"
- ;;
- esac
- AC_MSG_RESULT([$XOPEN_SOURCE])
-fi
-
-dnl }}}
-
-dnl C99_SOURCE {{{
-
-AC_SUBST([C99_SOURCE])
-
-AC_ARG_ENABLE([c99-source],
- [AS_HELP_STRING([--enable-c99-source],
- [Enable C99 source (development use only)])])
-
-if test "x$enable_c99_source" = xyes; then
- AC_MSG_CHECKING([for $CC flags to accept C99])
- case $CC in
- # FIXME: what flags are required for other hosts/compilers?
- gcc*)
- C99_SOURCE="-std=c99"
- ;;
- esac
- AC_MSG_RESULT([$C99_SOURCE])
-fi
-
-dnl }}}
-
-dnl _DCF_HAS_VA_COPY {{{
-
-AC_SUBST([_DCF_HAS_VA_COPY])
-
-dnl check for va_copy {{{
-
-AC_MSG_CHECKING([for va_copy])
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $C99_SOURCE"
-AC_RUN_IFELSE([AC_LANG_SOURCE([[
-
-#include <stdarg.h>
-#include <stdlib.h>
-
-void f(void *last, ...)
-{
- va_list ap, aq;
- va_start(ap, last);
- va_copy(aq, ap);
- va_end(ap);
- exit(va_arg(aq, int));
-}
-
-int main()
-{
- f(NULL, EXIT_SUCCESS);
- exit(EXIT_FAILURE);
-}
-
-]])],
- [AC_MSG_RESULT([yes])
- _DCF_HAS_VA_COPY="-DCF_HAVE_VA_COPY"],
- [AC_MSG_RESULT([no])])
-CFLAGS="$save_CFLAGS"
-
-dnl }}}
-
-dnl check whether -ansi breaks va_copy {{{
-
-if test "x${XOPEN_SOURCE}" != "x"; then
- AC_MSG_CHECKING([whether XOPEN_SOURCE breaks va_copy])
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $XOPEN_SOURCE $C99_SOURCE"
- AC_LINK_IFELSE([AC_LANG_SOURCE([[
-
-#include <stdarg.h>
-#include <stdlib.h>
-
-void f(void *last, ...)
-{
- va_list ap, aq;
- va_start(ap, last);
- va_copy(aq, ap);
- va_end(ap);
- va_end(aq);
-}
-
-int main()
-{
- f(NULL);
- exit(EXIT_SUCCESS);
-}
-
-]])],
- [AC_MSG_RESULT([no])],
- [AC_MSG_RESULT([yes, clearing XOPEN_SOURCE])
- XOPEN_SOURCE=""])
- CFLAGS="$save_CFLAGS"
-fi
-dnl }}}
-
-dnl }}}
-
-dnl _DCF_NO_LOCALE {{{
-
-AC_SUBST([_DCF_NO_LOCALE])
-
-AC_ARG_ENABLE([locale],
- [AS_HELP_STRING([--disable-locale],
- [Disable locale support])])
-
-if test "x$enable_locale" == xno; then
- _DCF_NO_LOCALE="-DCF_NO_LOCALE"
-fi
-
-dnl }}}
-
-
-AC_OUTPUT([system-ac.mk])
-
-if test "x$lua_version" = "x5.0"; then
- AC_MSG_NOTICE([**])
- AC_MSG_NOTICE([** lua version 5.0 is buggy, consider upgrading to 5.0.1])
- AC_MSG_NOTICE([** see http://lua-users.org/lists/lua-l/2003-10/msg00039.html])
- AC_MSG_NOTICE([**])
-fi
-
-dnl vim: foldmethod=marker tabstop=4 shiftwidth=4
+++ /dev/null
-##
-## System settings
-##
-
-
-##
-## Installation paths
-##
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-
-# Unless you are creating a package conforming to some OS's standards, you
-# probably do not want to modify the following directories:
-
-# Main binaries
-BINDIR=@bindir@
-# Configuration .lua files
-ETCDIR=@sysconfdir@/@PACKAGE_TARNAME@
-# Some .lua files and ion-* shell scripts
-SHAREDIR=@datadir@/@PACKAGE_TARNAME@
-# Manual pages
-MANDIR=@datadir@/man
-# Some documents
-DOCDIR=@datadir@/doc/@PACKAGE_TARNAME@
-# Nothing at the moment
-INCDIR=@includedir@
-# Nothing at the moment
-LIBDIR=@libdir@
-# Modules
-MODULEDIR=@libdir@/@PACKAGE_TARNAME@/mod
-# Compiled Lua source code
-LCDIR=@libdir@/@PACKAGE_TARNAME@/lc
-# ion-completefile (does not belong in SHAREDIR being a binary file)
-EXTRABINDIR=@libexecdir@/@PACKAGE_TARNAME@/bin
-# For ion-completeman system-wide cache
-#VARDIR=@localstatedir@/cache/@PACKAGE_TARNAME@
-VARDIR=/var/cache/@PACKAGE_TARNAME@
-# Message catalogs
-LOCALEDIR=@prefix@/share/locale
-
-
-##
-## Modules
-##
-
-# Set PRELOAD_MODULES=1 if your system does not support dynamically loaded
-# modules through 'libdl' or has non-standard naming conventions.
-PRELOAD_MODULES=@PRELOAD_MODULES@
-
-# Flags to link with libdl.
-DL_LIBS=@DL_LIBS@
-
-
-##
-## Lua
-##
-
-# If you have installed Lua 5.0 from the official tarball without changing
-# paths, this should do it.
-#LUA_DIR=/usr/local
-LUA_LIBS = @LUA_LIBS@
-LUA_INCLUDES = @LUA_INCLUDES@
-LUA=@LUA@
-LUAC=@LUAC@
-
-# If you are using the Debian packages, the following settings should be
-# what you want.
-#LUA_LIBS=`lua-config50 --libs`
-#LUA_INCLUDES=`lua-config50 --include`
-#LUA=lua50
-#LUAC=luac50
-
-
-##
-## X libraries, includes and options
-##
-
-#X11_PREFIX=/usr/X11R6
-# SunOS/Solaris
-#X11_PREFIX=/usr/openwin
-
-X11_LIBS=@X_EXTRA_LIBS@ @X_PRE_LIBS@ -lX11 @X_LIBS@
-X11_INCLUDES=@X_CFLAGS@
-
-# Change commenting to disable Xinerama support
-XINERAMA_LIBS=@XINERAMA_LIBS@
-DEFINES += @_DCF_NO_XINERAMA@
-
-# XFree86 libraries up to 4.3.0 have a bug that will cause Ion to segfault
-# if Opera is used when i18n support is enabled. The following setting
-# should work around that situation.
-DEFINES += @_DCF_XFREE86_TEXTPROP_BUG_WORKAROUND@
-
-# Use the Xutf8 routines (XFree86 extension) instead of Xmb routines in
-# an UTF8 locale.
-DEFINES += @_DCF_DE_USE_XUTF8@
-
-# Remap F11 key to SunF36 and F12 to SunF37? You may want to set this
-# on SunOS.
-DEFINES += @_DCF_SUN_F1X_REMAP@
-
-
-##
-## libc
-##
-
-# You may uncomment this if you know your system has
-# asprintf and vasprintf in the c library. (gnu libc has.)
-# If HAS_SYSTEM_ASPRINTF is not defined, an implementation
-# in sprintf_2.2/ is used.
-HAS_SYSTEM_ASPRINTF=@HAS_SYSTEM_ASPRINTF@
-
-
-# If you're on an archaic system (such as relatively recent *BSD releases)
-# without even dummy multibyte/widechar and localisation support, you may
-# have to uncomment the following line:
-DEFINES += @_DCF_NO_LOCALE@
-
-
-##
-## C compiler
-##
-
-CC=@CC@
-
-# Same as '-Wall -pedantic' without '-Wunused' as callbacks often
-# have unused variables.
-WARN= -W -Wimplicit -Wreturn-type -Wswitch -Wcomment \
- -Wtrigraphs -Wformat -Wchar-subscripts \
- -Wparentheses -pedantic -Wuninitialized
-
-CFLAGS=@CFLAGS@ $(WARN) $(DEFINES) $(EXTRA_INCLUDES) $(INCLUDES)
-LDFLAGS=@LDFLAGS@ $(EXTRA_LIBS) $(LIBS)
-EXPORT_DYNAMIC=-Xlinker --export-dynamic
-
-# The following options are mainly for development use and can be used
-# to check that the code seems to conform to some standards. Depending
-# on the version and vendor of you libc, the options may or may not have
-# expected results. If you define one of C99_SOURCE or XOPEN_SOURCE, you
-# may also have to define the other.
-
-#C89_SOURCE=-ansi
-
-#POSIX_SOURCE=@_D_POSIX_SOURCE@
-
-# Most systems
-#XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED
-# SunOS, (Irix)
-#XOPEN_SOURCE=-D__EXTENSIONS__
-
-#C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY
-
-# The -DCF_HAS_VA_COPY option should allow for some optimisations, and
-# in some cases simply defining
-C99_SOURCE=@_DCF_HAS_VA_COPY@
-# might allow for those optimisations to be taken without any special
-# libc or compiler options.
-
-
-##
-## make depend
-##
-
-DEPEND_FILE=.depend
-DO_MAKE_DEPEND=$(CC) -MM $(DEFINES) $(EXTRA_INCLUDES) $(INCLUDES)
-MAKE_DEPEND=$(DO_MAKE_DEPEND) $(SOURCES) > $(DEPEND_FILE)
-
-##
-## AR
-##
-
-AR=@AR@
-ARFLAGS=cr
-RANLIB=@RANLIB@
-
-
-##
-## Install & strip
-##
-
-INSTALL=@INSTALL@
-INSTALLDIR=mkdir -p
-
-BIN_MODE=755
-DATA_MODE=644
-
-STRIP=@STRIP@
-
-RM=rm
local function dobindings(fn, bindings)
local p={}
+ local dummy = function() end
p.META="Mod1+"
p.ALTMETA=""
+ p.dopath=dummy
+ p.defmenu=dummy
+ p.defctxmenu=dummy
+ p.menuentry=dummy
+ p.submenu=dummy
+ p.submap_enter=dummy
+ p.submap_leave=dummy
+ p.submap_wait=dummy
+
+ p.ioncore={
+ set=dummy,
+ }
+
function p.bdoc(text)
return {action = "doc", text = text}
end
return mact("mdrag", buttonspec, cmd, guard)
end
- function p.defbindings(context, bnd)
- if not bindings[context] then
- bindings[context]=bnd
+ function ins(t, v)
+ if not t.seen then
+ t.seen={}
+ end
+
+ if (not v.kcb) or v.submap then
+ -- Submap rebinds are not presently handled
+ table.insert(t, v)
else
- for _, v in ipairs(bnd) do
- table.insert(bindings[context], v)
+ local id=v.action..":"..v.kcb..":"..(v.area or "")
+ local i=t.seen[id]
+ if i then
+ t[i].invalid=true
+ end
+ if v.cmd then
+ table.insert(t, v)
+ t.seen[id]=#t
+ else
+ -- Unbind only
+ t.seen[id]=nil
end
end
end
-
- local function dummy()
- end
- p.defmenu=dummy
- p.defctxmenu=dummy
- p.menuentry=dummy
- p.submenu=dummy
+ function p.defbindings(context, bnd)
+ if not bindings[context] then
+ bindings[context]={}
+ else
+ -- Reset documentation
+ table.insert(bindings[context], { action = "doc", text = nil })
+ end
+
+ for _, v in ipairs(bnd) do
+ ins(bindings[context], v)
+ end
+ end
- p.ioncore={ set=dummy }
-
local env=setmetatable({}, {
__index=p,
__newindex=function(x)
local function parsetable(t, prefix)
for _, v in ipairs(t) do
- if v.kcb then
- v.kcb=string.gsub(v.kcb, "AnyModifier%+", "")
- end
- if v.action=="doc" then
- outi=outi+1
- out[outi]={doc=v.text, bindings={}}
- elseif v.submap then
- parsetable(v.submap, prefix..v.kcb.." ")
- else
- assert(out[outi])
- v.kcb=prefix..v.kcb
- table.insert(out[outi].bindings, v)
+ if not v.invalid then
+ if v.kcb then
+ v.kcb=string.gsub(v.kcb, "AnyModifier%+", "")
+ end
+ if v.action=="doc" then
+ if outi==0 or #out[outi].bindings>0 then
+ outi=outi+1
+ end
+ out[outi]={doc=v.text, bindings={}}
+ elseif v.submap then
+ parsetable(v.submap, prefix..v.kcb.." ")
+ else
+ assert(out[outi])
+ v.kcb=prefix..v.kcb
+ table.insert(out[outi].bindings, v)
+ end
end
end
end
+ if outi~=0 and #out[outi].bindings==0 then
+ out[outi]=nil
+ end
+
parsetable(bindings, "")
return out
local function write_bindings_man(db)
local function write_binding_man(v)
- return '.TP\n.B '..combine_bindings(v)..'\n'..gettext(v.doc)..'\n'
+ return '.TP\n.B '..combine_bindings(v)..'\n'..gettext(v.doc or "?")..'\n'
end
local s=""
install: subdirs-install _install
+ifdef MAKE_EXPORTS
+
# Exports
######################################
-ifdef MAKE_EXPORTS
-
EXPORTS_C = exports.c
EXPORTS_H = exports.h
$(EXPORTS_H): $(EXPORTS_C)
-$(EXPORTS_C): $(SOURCES)
+$(EXPORTS_C): $(SOURCES) $(MKEXPORTS_EXTRA_DEPS)
$(MKEXPORTS) -module $(MAKE_EXPORTS) -o $(EXPORTS_C) -h $(EXPORTS_H) \
$(SOURCES) $(MKEXPORTS_EXTRAS)
+# Exports documentation
+######################################
+
+EXPORTS_DOC = exports.tex
+
+TO_CLEAN := $(TO_CLEAN) $(EXPORTS_DOC)
+
+_exports_doc: $(EXPORTS_DOC)
+
+$(EXPORTS_DOC): $(SOURCES) $(LUA_SOURCES) $(MKEXPORTS_EXTRA_DEPS)
+ $(MKEXPORTS) -mkdoc -module $(MAKE_EXPORTS) -o $(EXPORTS_DOC) \
+ $(SOURCES) $(LUA_SOURCES) $(MKEXPORTS_EXTRAS)
+
else # !MAKE_EXPORTS
EXPORTS_C =
EXPORTS_H =
+EXPORTS_DOC =
endif # !MAKE_EXPORTS
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * FOOBARBAZQUK
*/
#ifndef ION_CONFIG_H
#define CF_MAX_MOVERES_STR_SIZE 32
-#define CF_TAB_TEXT_ALIGN ALIGN_CENTER
#define CF_RESIZE_DELAY 1500
#define CF_XMESSAGE "xmessage -file "
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
/*{{{ Brush creation and releasing */
+#define MATCHES(S, A) (gr_stylespec_score(&(S), A)>0)
+#define MATCHES2(S, A1, A2) (gr_stylespec_score2(&(S), A1, A2)>0)
+
+#define ENSURE_INITSPEC(S, NM) \
+ if((S).attrs==NULL) gr_stylespec_load(&(S), NM);
+
+
static GrStyleSpec tabframe_spec=GR_STYLESPEC_INIT;
static GrStyleSpec tabinfo_spec=GR_STYLESPEC_INIT;
static GrStyleSpec tabmenuentry_spec=GR_STYLESPEC_INIT;
uint tmp=0;
uint tbf=1, lrf=1;
uint pad=bd->pad;
+ uint spc=style->spacing;
switch(bd->sides){
case DEBORDER_TB:
break;
}
+ /* Ridge/groove styles use 'padding' for the spacing between the
+ * 'highlight' and 'shadow' portions of the border, and 'spacing'
+ * between the border and contents. Inlaid style also uses 'spacing'
+ * between the contents and the border, and padding as its outer
+ * component. Elevated style does not use spacing.
+ */
switch(bd->style){
case DEBORDER_RIDGE:
case DEBORDER_GROOVE:
- tmp=bd->sh+bd->hl;
- bdw->top=tbf*tmp+pad; bdw->bottom=tbf*tmp+pad;
- bdw->left=lrf*tmp+pad; bdw->right=lrf*tmp+pad;
+ tmp=bd->sh+bd->hl+pad;
+ bdw->top=tbf*tmp+spc; bdw->bottom=tbf*tmp+spc;
+ bdw->left=lrf*tmp+spc; bdw->right=lrf*tmp+spc;
break;
case DEBORDER_INLAID:
- tmp=bd->sh; bdw->top=tbf*tmp+pad; bdw->left=lrf*tmp+pad;
- tmp=bd->hl; bdw->bottom=tbf*tmp+pad; bdw->right=lrf*tmp+pad;
+ tmp=bd->sh+pad; bdw->top=tbf*tmp+spc; bdw->left=lrf*tmp+spc;
+ tmp=bd->hl+pad; bdw->bottom=tbf*tmp+spc; bdw->right=lrf*tmp+spc;
break;
case DEBORDER_ELEVATED:
default:
{
DEStyle *style=brush->d;
while(style!=NULL){
- if(extl_table_get(style->data_table, 's', type, key, data))
+ if(extl_table_get(style->extras_table, 's', type, key, data))
return TRUE;
style=style->based_on;
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_DE_BRUSH_H
typedef void DEBrushExtrasFn(DEBrush *brush,
const WRectangle *g,
DEColourGroup *cg,
- GrBorderWidths *bdw,
- GrFontExtents *fnte,
+ const GrBorderWidths *bdw,
+ const GrFontExtents *fnte,
const GrStyleSpec *a1,
const GrStyleSpec *a2,
- bool pre);
+ bool pre, int index);
DECLCLASS(DEBrush){
GrBrush grbrush;
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <ioncore/common.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_DE_COLOUR_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
#include <ioncore/global.h>
#include <ioncore/common.h>
#include <ioncore/gr.h>
+#include <ioncore/gr-util.h>
#include "brush.h"
#include "font.h"
#include "private.h"
}
-static GrStyleSpec dragged_spec=GR_STYLESPEC_INIT;
-static GrStyleSpec tagged_spec=GR_STYLESPEC_INIT;
-static GrStyleSpec submenu_spec=GR_STYLESPEC_INIT;
+
+#define ISSET(S, A) ((S)!=NULL && gr_stylespec_isset(S, A))
+
+
+GR_DEFATTR(dragged);
+GR_DEFATTR(tagged);
+GR_DEFATTR(submenu);
+GR_DEFATTR(numbered);
+GR_DEFATTR(tabnumber);
+
+
+static void ensure_attrs()
+{
+ GR_ALLOCATTR_BEGIN;
+ GR_ALLOCATTR(dragged);
+ GR_ALLOCATTR(tagged);
+ GR_ALLOCATTR(submenu);
+ GR_ALLOCATTR(numbered);
+ GR_ALLOCATTR(tabnumber);
+ GR_ALLOCATTR_END;
+}
+
+
+static int get_ty(const WRectangle *g, const GrBorderWidths *bdw,
+ const GrFontExtents *fnte)
+{
+ return (g->y+bdw->top+fnte->baseline
+ +(g->h-bdw->top-bdw->bottom-fnte->max_height)/2);
+}
void debrush_tab_extras(DEBrush *brush, const WRectangle *g,
- DEColourGroup *cg, GrBorderWidths *bdw,
- GrFontExtents *fnte,
+ DEColourGroup *cg, const GrBorderWidths *bdw,
+ const GrFontExtents *fnte,
const GrStyleSpec *a1,
const GrStyleSpec *a2,
- bool pre)
+ bool pre, int index)
{
DEStyle *d=brush->d;
GC tmp;
*/
static bool swapped=FALSE;
- ENSURE_INITSPEC(dragged_spec, "dragged");
- ENSURE_INITSPEC(tagged_spec, "tagged");
+ ensure_attrs();
if(pre){
- if(!MATCHES2(dragged_spec, a1, a2))
- return;
-
- tmp=d->normal_gc;
- d->normal_gc=d->stipple_gc;
- d->stipple_gc=tmp;
- swapped=TRUE;
- XClearArea(ioncore_g.dpy, brush->win, g->x, g->y, g->w, g->h, False);
+ if(ISSET(a2, GR_ATTR(dragged)) || ISSET(a1, GR_ATTR(dragged))){
+ tmp=d->normal_gc;
+ d->normal_gc=d->stipple_gc;
+ d->stipple_gc=tmp;
+ swapped=TRUE;
+ XClearArea(ioncore_g.dpy, brush->win, g->x, g->y, g->w, g->h, False);
+ }
return;
}
- if(MATCHES2(tagged_spec, a1, a2)){
+
+ if((ISSET(a1, GR_ATTR(numbered)) || ISSET(a2, GR_ATTR(numbered)))
+ && index>=0){
+
+ DEColourGroup *cg;
+ GrStyleSpec tmp;
+
+ gr_stylespec_init(&tmp);
+ gr_stylespec_append(&tmp, a2);
+ gr_stylespec_set(&tmp, GR_ATTR(tabnumber));
+
+ cg=debrush_get_colour_group2(brush, a1, &tmp);
+
+ gr_stylespec_unalloc(&tmp);
+
+ if(cg!=NULL){
+ char *s=NULL;
+
+ libtu_asprintf(&s, "[%d]", index+1);
+
+ if(s!=NULL){
+ int l=strlen(s);
+ uint w=debrush_get_text_width(brush, s, l);
+ if(w < g->w-bdw->right-bdw->left){
+ int ty=get_ty(g, bdw, fnte);
+ int tx=(d->textalign==DEALIGN_RIGHT
+ ? g->x+bdw->left
+ : g->x+g->w-bdw->right-w);
+ debrush_do_draw_string(brush, tx, ty, s, l, TRUE, cg);
+ }
+ free(s);
+ }
+ }
+ }
+
+ if(ISSET(a2, GR_ATTR(tagged)) || ISSET(a1, GR_ATTR(tagged))){
XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg);
copy_masked(brush, d->tag_pixmap, brush->win, 0, 0,
g->x+g->w-bdw->right-d->tag_pixmap_w,
g->y+bdw->top);
}
-
+
if(swapped){
tmp=d->normal_gc;
d->normal_gc=d->stipple_gc;
void debrush_menuentry_extras(DEBrush *brush,
const WRectangle *g,
DEColourGroup *cg,
- GrBorderWidths *bdw,
- GrFontExtents *fnte,
+ const GrBorderWidths *bdw,
+ const GrFontExtents *fnte,
const GrStyleSpec *a1,
const GrStyleSpec *a2,
- bool pre)
+ bool pre, int index)
{
int tx, ty;
if(pre)
return;
- ENSURE_INITSPEC(submenu_spec, "submenu");
+ ensure_attrs();
- if(!MATCHES2(submenu_spec, a1, a2))
- return;
-
- ty=(g->y+bdw->top+fnte->baseline
- +(g->h-bdw->top-bdw->bottom-fnte->max_height)/2);
- tx=g->x+g->w-bdw->right;
+ if(ISSET(a2, GR_ATTR(submenu)) || ISSET(a1, GR_ATTR(submenu))){
+ ty=get_ty(g, bdw, fnte);
+ tx=g->x+g->w-bdw->right;
- debrush_do_draw_string(brush, tx, ty, DE_SUB_IND, DE_SUB_IND_LEN,
- FALSE, cg);
+ debrush_do_draw_string(brush, tx, ty, DE_SUB_IND, DE_SUB_IND_LEN,
+ FALSE, cg);
+ }
}
DEColourGroup *cg,
bool needfill,
const GrStyleSpec *a1,
- const GrStyleSpec *a2)
+ const GrStyleSpec *a2,
+ int index)
{
uint len;
GrBorderWidths bdw;
grbrush_get_font_extents(&(brush->grbrush), &fnte);
if(brush->extras_fn!=NULL)
- brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, TRUE);
+ brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, TRUE, index);
debrush_do_draw_box(brush, geom, cg, needfill);
tx=geom->x+bdw.left;
}
- ty=(geom->y+bdw.top+fnte.baseline
- +(geom->h-bdw.top-bdw.bottom-fnte.max_height)/2);
+ ty=get_ty(geom, &bdw, &fnte);
debrush_do_draw_string(brush, tx, ty, text, len, FALSE, cg);
}while(0);
if(brush->extras_fn!=NULL)
- brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, FALSE);
+ brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, FALSE, index);
}
if(cg!=NULL){
debrush_do_draw_textbox(brush, geom, text, cg, needfill,
- attr, NULL);
+ attr, NULL, -1);
}
}
if(cg!=NULL){
debrush_do_draw_textbox(brush, &g, elem[i].text, cg, needfill,
- common_attrib, &elem[i].attr);
+ common_attrib, &elem[i].attr, i);
}
if(i==n-1)
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_DE_FONT_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_DE_FONTSET_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
/*{{{ Colours */
-bool de_get_colour(WRootWin *rootwin, DEColour *ret,
- ExtlTab tab, DEStyle *based_on,
- const char *what, DEColour substitute)
+static bool de_get_colour_(WRootWin *rootwin, DEColour *ret,
+ ExtlTab tab, const char *what,
+ DEColour substitute, DEColour inherit)
{
char *name=NULL;
- bool ok=FALSE;
+ bool set=FALSE;
if(extl_table_gets_s(tab, what, &name)){
- ok=de_alloc_colour(rootwin, ret, name);
+ if(strcmp(name, "inherit")==0){
+ set=de_duplicate_colour(rootwin, inherit, ret);
+ }else{
+ set=de_alloc_colour(rootwin, ret, name);
- if(!ok)
- warn(TR("Unable to allocate colour \"%s\"."), name);
-
+ if(!set)
+ warn(TR("Unable to allocate colour \"%s\"."), name);
+ }
free(name);
- }else if(based_on!=NULL){
- return de_get_colour(rootwin, ret, based_on->data_table,
- based_on->based_on, what, substitute);
}
- if(!ok)
- ok=de_duplicate_colour(rootwin, substitute, ret);
+ if(!set)
+ de_duplicate_colour(rootwin, substitute, ret);
- return ok;
+ return set;
}
+static bool de_get_colour(WRootWin *rootwin, DEColour *ret,
+ ExtlTab tab, const char *what, DEColour substitute)
+{
+ return de_get_colour_(rootwin, ret, tab, what, substitute, substitute);
+}
+
+
void de_get_colour_group(WRootWin *rootwin, DEColourGroup *cg,
ExtlTab tab, DEStyle *based_on)
{
- de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour",
- DE_WHITE(rootwin));
- de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour",
- DE_WHITE(rootwin));
- de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour",
- DE_BLACK(rootwin));
- de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour",
- DE_WHITE(rootwin));
- de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour",
- cg->bg);
+ bool bgset;
+ DEColour padinh;
+
+ de_get_colour(rootwin, &(cg->hl), tab, "highlight_colour",
+ (based_on ? based_on->cgrp.hl : DE_WHITE(rootwin)));
+ de_get_colour(rootwin, &(cg->sh), tab, "shadow_colour",
+ (based_on ? based_on->cgrp.sh : DE_WHITE(rootwin)));
+ de_get_colour(rootwin, &(cg->fg), tab, "foreground_colour",
+ (based_on ? based_on->cgrp.fg : DE_WHITE(rootwin)));
+ bgset=de_get_colour(rootwin, &(cg->bg), tab, "background_colour",
+ (based_on ? based_on->cgrp.bg : DE_BLACK(rootwin)));
+
+ padinh=(based_on ? based_on->cgrp.pad : DE_WHITE(rootwin));
+
+ de_get_colour_(rootwin, &(cg->pad), tab, "padding_colour",
+ (bgset ? cg->bg : padinh), padinh);
}
/*}}}*/
+/*{{{ Extras filter/copy */
+
+
+static const char * const known_values[]={
+ "based_on",
+ "font",
+ "shadow_pixels",
+ "highlight_pixels",
+ "padding_pixels",
+ "border_style",
+ "border_sides",
+ "spacing",
+ "foreground_colour",
+ "background_colour",
+ "shadow_colour",
+ "highlight_colour",
+ "padding_colour",
+ "text_align",
+ NULL
+};
+
+
+static bool filter_extras_iter_fn(ExtlAny k, ExtlAny v, void *p)
+{
+ ExtlTab *tgt=(ExtlTab*)p;
+ const char *s;
+ int i;
+
+ if(k.type!='s' && k.type!='S')
+ return TRUE;
+
+ for(i=0; known_values[i]; i++){
+ if(strcmp(known_values[i], k.value.s)==0)
+ return TRUE;
+ }
+
+ if(*tgt==extl_table_none())
+ *tgt=extl_create_table();
+
+ extl_table_set(*tgt, 'a', 'a', k, v);
+
+ return TRUE;
+}
+
+
+static void filter_extras(ExtlTab *tgt, ExtlTab src)
+{
+ /* Copy any unknown string-keyed values from src to tgt,
+ * possibly creating tgt.
+ */
+ extl_table_iter(src, filter_extras_iter_fn, tgt);
+}
+
+
+/*}}}*/
+
+
/*{{{ de_defstyle */
{
DEStyle *based_on=style->based_on;
- style->data_table=extl_ref_table(tab);
-
if(based_on!=NULL){
style->border=based_on->border;
style->transparency_mode=based_on->transparency_mode;
EXTL_EXPORT
bool de_defstyle_rootwin(WRootWin *rootwin, const char *name, ExtlTab tab)
{
- DEStyle *style;
- char *fnt;
+ DEStyle *style, *based_on=NULL;
+ int based_on_score=-1;
+ char *fnt, *bss;
uint n;
- char *based_on_name;
- DEStyle *based_on=NULL;
- GrStyleSpec based_on_spec;
if(name==NULL)
return FALSE;
style=de_create_style(rootwin, name);
-
+
if(style==NULL)
return FALSE;
-
- if(get_spec(tab, "based_on", &based_on_spec, &based_on_name)){
- based_on=de_get_style(rootwin, &based_on_spec);
+
+ if(extl_table_gets_s(tab, "based_on", &bss)){
+ GrStyleSpec bs;
- gr_stylespec_unalloc(&based_on_spec);
-
- if(based_on==style){
- warn(TR("'based_on' for %s points back to the style itself."),
- name);
- }else if(based_on==NULL){
- warn(TR("Unknown base style. \"%s\""), based_on_name);
- }else{
- style->based_on=based_on;
- based_on->usecount++;
- /* Copy simple parameters */
- }
+ gr_stylespec_load(&bs, bss);
+
+ based_on=de_get_style(rootwin, &bs);
- free(based_on_name);
+ gr_stylespec_unalloc(&bs);
+ free(bss);
+ }else{
+ based_on=de_get_style(rootwin, &style->spec);
}
-
+
+ if(based_on!=NULL){
+ style->based_on=based_on;
+ based_on->usecount++;
+ }
+
de_get_nonfont(rootwin, style, tab);
if(extl_table_gets_s(tab, "font", &fnt)){
if(style->font==NULL)
de_load_font_for_style(style, CF_FALLBACK_FONT_NAME);
+ if(based_on!=NULL &&
+ gr_stylespec_equals(&based_on->spec, &style->spec)){
+
+ /* The new style replaces based_on, so it may be dumped. */
+ if(!based_on->is_fallback)
+ destyle_dump(based_on);
+
+ if(based_on->usecount==1){
+ uint nb=based_on->n_extra_cgrps;
+ uint ns=style->n_extra_cgrps;
+ /* Nothing else is using based_on: optimise and move
+ * extra colour groups here, so that based_on can be freed.
+ */
+
+ if(nb>0){
+ DEColourGroup *cgs=ALLOC_N(DEColourGroup, nb+ns);
+
+ if(cgs!=NULL){
+ memcpy(cgs, based_on->extra_cgrps, sizeof(DEColourGroup)*nb);
+ memcpy(cgs+nb, style->extra_cgrps, sizeof(DEColourGroup)*ns);
+
+ free(style->extra_cgrps);
+ style->extra_cgrps=cgs;
+ style->n_extra_cgrps=nb+ns;
+
+ free(based_on->extra_cgrps);
+ based_on->extra_cgrps=NULL;
+ based_on->n_extra_cgrps=0;
+
+ }
+ }
+
+ /* style->extras_table should be none still */
+ style->extras_table=based_on->extras_table;
+ based_on->extras_table=extl_table_none();
+
+ style->based_on=based_on->based_on;
+ based_on->based_on=NULL;
+
+ destyle_unref(based_on);
+ }
+
+ }
+
+ filter_extras(&style->extras_table, tab);
+
+ destyle_add(style);
+
return TRUE;
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_DE_INIT_H
extern void de_get_border_style(uint *ret, ExtlTab tab);
extern void de_get_border(DEBorder *border, ExtlTab tab);
-extern bool de_get_colour(WRootWin *rootwin, DEColour *ret,
- ExtlTab tab, DEStyle *based_on,
- const char *what, DEColour substitute);
extern void de_get_colour_group(WRootWin *rootwin, DEColourGroup *cg,
ExtlTab tab, DEStyle *based_on);
extern void de_get_extra_cgrps(WRootWin *rootwin, DEStyle *style,
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_DE_PRIVATE_H
#define DE_SUB_IND " ->"
#define DE_SUB_IND_LEN 3
-#define MATCHES(S, A) (gr_stylespec_score(&(S), A)>0)
-#define MATCHES2(S, A1, A2) (gr_stylespec_score2(&(S), A1, A2)>0)
-
-#define ENSURE_INITSPEC(S, NM) \
- if((S).attrs==NULL) gr_stylespec_load(&(S), NM);
-
#endif /* ION_DE_PRIVATE_H */
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
if(style->extra_cgrps!=NULL)
free(style->extra_cgrps);
- extl_unref_table(style->data_table);
+ extl_unref_table(style->extras_table);
XFreeGC(ioncore_g.dpy, style->normal_gc);
}
-static void dump_style(DEStyle *style)
+void destyle_dump(DEStyle *style)
{
/* Allow the style still be used but get if off the list. */
UNLINK_ITEM(styles, style, next, prev);
style->n_extra_cgrps=0;
style->extra_cgrps=NULL;
- style->data_table=extl_table_none();
+ style->extras_table=extl_table_none();
create_normal_gc(style, rootwin);
}
-static DEStyle *do_create_style(WRootWin *rootwin, const char *name)
+DEStyle *de_create_style(WRootWin *rootwin, const char *name)
{
DEStyle *style=ALLOC(DEStyle);
if(style!=NULL){
}
-DEStyle *de_create_style(WRootWin *rootwin, const char *name)
+void destyle_add(DEStyle *style)
{
- DEStyle *oldstyle, *style;
- uint score;
-
- style=do_create_style(rootwin, name);
-
- if(style==NULL)
- return NULL;
-
- for(oldstyle=styles; oldstyle!=NULL; oldstyle=oldstyle->next){
- if(oldstyle->rootwin!=rootwin)
- continue;
- if(gr_stylespec_equals(&oldstyle->spec, &style->spec))
- break;
- }
-
- if(oldstyle!=NULL && !oldstyle->is_fallback)
- dump_style(oldstyle);
-
LINK_ITEM_FIRST(styles, style, next, prev);
-
- return style;
}
-
/*EXTL_DOC
* Clear all styles from drawing engine memory.
*/
for(style=styles; style!=NULL; style=next){
next=style->next;
if(!style->is_fallback)
- dump_style(style);
+ destyle_dump(style);
}
}
warn(TR("Style is still in use [%d] but the module "
"is being unloaded!"), style->usecount);
}
- dump_style(style);
+ destyle_dump(style);
}
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_DE_STYLE_H
int textalign;
uint spacing;
- ExtlTab data_table;
+ ExtlTab extras_table;
/* Only initialised if used as a DETabBrush */
bool tabbrush_data_ok;
extern DEStyle *de_get_style(WRootWin *rootwin, const GrStyleSpec *spec);
+extern void destyle_add(DEStyle *style);
+extern void destyle_dump(DEStyle *style);
+
#endif /* ION_DE_STYLE_H */
+2007-05-06 14:40 UTC Tuomo Valkonen <tuomov@iki.fi>
+ tagged ion-doc-3rc-20070506
+
+2007-05-06 14:25 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * mod_mgmtmode removal
+
+2007-05-06 13:09 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed obsolete example
+
+2007-05-04 21:46 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Fixes and updates to binding docs
+
+2007-05-04 16:13 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Documen the submap leave/enter stuff
+
+2007-04-26 22:44 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Improved string marking
+
+2007-04-26 22:28 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Drawing stuff doc improvements
+
+2007-04-22 18:14 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Document is_dockapp
+
+2007-04-22 12:29 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Winprop doc. improvements/fixes
+
+2007-04-22 00:16 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Minor fixes and improvements
+
+2007-04-20 16:36 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Document is_transient
+
+2007-04-15 12:33 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Updates to implementation notes
+
+2007-04-08 12:38 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Removed quotation abuse
+
+2007-04-08 12:37 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Size policy documentation
+
+2007-04-08 11:53 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Quote changes
+
+2007-04-08 11:49 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Fixed typos etc.
+
+2007-04-08 11:34 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Intro improvements
+
+2007-04-06 11:27 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Systray stuff improvs
+
+2007-04-06 11:23 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Year changed..
+
+2007-04-06 11:17 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Function reference building improvements
+
+2007-04-05 16:32 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Bah, stupid latex2html
+
+2007-04-05 16:27 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * mod_statusbar documentation
+
+2007-04-05 15:21 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Oops, mod_statusbar.lua was missing from sources
+
+2007-03-20 11:27 UTC Tuomo Valkonen <tuomov@iki.fi>
+ * Fixes
+
2007-03-18 20:09 UTC Tuomo Valkonen <tuomov@iki.fi>
tagged ion-doc-3ds-20070318
DOCS=ionconf ionnotes
-FNTEXES=ioncore-fns.tex mod_tiling-fns.tex \
- mod_query-fns.tex de-fns.tex mod_menu-fns.tex \
- mod_dock-fns.tex mod_sp-fns.tex mod_statusbar-fns.tex
+FNTEXES=ioncore.exports mod_tiling.exports \
+ mod_query.exports de.exports mod_menu.exports \
+ mod_dock.exports mod_sp.exports mod_statusbar.exports
# Generic rules
######################################
# Function reference rules
######################################
-ioncore-fns.tex: $(TOPDIR)/ioncore/*.c $(TOPDIR)/ioncore/*.lua
- $(MKEXPORTS) -module ioncore -mkdoc -o $@ $+
+include $(TOPDIR)/libmainloop/rx.mk
-mod_tiling-fns.tex: $(TOPDIR)/mod_tiling/*.c
- $(MKEXPORTS) -module mod_tiling -mkdoc -o $@ $+
+$(TOPDIR)/%/exports.tex:
+ $(MAKE) -C $$(dirname $@) _exports_doc
-mod_query-fns.tex: $(TOPDIR)/mod_query/*.c $(TOPDIR)/mod_query/mod_query.lua
- $(MKEXPORTS) -module mod_query -mkdoc -o $@ $+
-
-mod_menu-fns.tex: $(TOPDIR)/mod_menu/*.c $(TOPDIR)/mod_menu/mod_menu.lua
- $(MKEXPORTS) -module mod_menu -mkdoc -o $@ $+
-
-mod_dock-fns.tex: $(TOPDIR)/mod_dock/*.c
- $(MKEXPORTS) -module mod_dock -mkdoc -o $@ $+
-
-mod_sp-fns.tex: $(TOPDIR)/mod_sp/*.c
- $(MKEXPORTS) -module mod_sp -mkdoc -o $@ $+
-
-mod_statusbar-fns.tex: $(TOPDIR)/mod_statusbar/*.c
- $(MKEXPORTS) -module mod_statusbar -mkdoc -o $@ $+
-
-de-fns.tex: $(TOPDIR)/de/*.c
- $(MKEXPORTS) -module de -mkdoc -o $@ $+
+%.exports: $(TOPDIR)/%/exports.tex
+ cp $< $@
# Function list
######################################
loaded prior to defining any module-specific bindings.
Bindings are defined by calling the function
-\fnrefx{ioncore}{defbindings} with the ''context'' of the
+\fnrefx{ioncore}{defbindings} with the ``context'' of the
bindings and the a table of new bindings to make. The context is simply
string indicating one of the classes of regions (or modes such as
\type{WMoveresMode}) introduced in section \ref{sec:objects}, and fully
\end{verbatim}
There has been some confusion among users about the need to define the
-''context'' for each binding, so let me try to explain this design
+``context'' for each binding, so let me try to explain this design
decision here. The thing is that if there was a just a simple 'bind this
key to this action' method without knowledge of the context, some
limitations would have to be made on the available actions and writing
switch to $n$:th workspaces is bound to \key{Mod1+n} while the switch to
$n$:th tab is bound to the sequence \key{Mod1+k n}.
-Currently known ''contexts'' include:
-\code{WScreen},
-\code{WMPlex},
-\code{WMPlex.toplevel},
-\code{WFrame},
-\code{WFrame.toplevel},
-\code{WFrame.floating},
-\code{WFrame.tiled},
-\code{WFrame.transient},
-\code{WMoveresMode},
-\code{WGroup},
-\code{WGroupCW},
-\code{WGroupWS},
-\code{WClientWin},
-\code{WTiling}, and
-\code{WStatusBar}.
+Currently known contexts include:
+\codestr{WScreen},
+\codestr{WMPlex},
+\codestr{WMPlex.toplevel},
+\codestr{WFrame},
+\codestr{WFrame.toplevel},
+\codestr{WFrame.floating},
+\codestr{WFrame.tiled},
+\codestr{WFrame.transient},
+\codestr{WMoveresMode},
+\codestr{WGroup},
+\codestr{WGroupCW},
+\codestr{WGroupWS},
+\codestr{WClientWin},
+\codestr{WTiling}, and
+\codestr{WStatusBar}.
Most of these should be self-explanatory, corresponding to objects
-of class with the same name. The ones with \code{.toplevel} suffix
-refer to screens and ''toplevel'' frames, i.e. frames that are
-not used for transient windows. Likewise \code{.transient} refers
-to frames in transient mode, and \code{.tiled} and \code{.floating}
+of class with the same name. The ones with \codestr{.toplevel} suffix
+refer to screens and ``toplevel'' frames, i.e. frames that are
+not used for transient windows. Likewise \codestr{.transient} refers
+to frames in transient mode, and \codestr{.tiled} and \codestr{.floating}
to frames in, respectively, tiled and floating modes.
\subsection{Binding handlers and special variables}
Unlike in Ion2, in Ion3 binding handlers are not normally passed as
-''anonymous functions'', although this is still possible. The preferred
-method now is to pass the code of the handler as a string. Two special
-variables are available in this code. These are
+``anonymous functions'', although this is still possible. The preferred
+method now is to pass the code of the handler as a string. Two following
+special variables are available in this code.
\begin{tabularx}{\linewidth}{lX}
\tabhead{Variable & Description}
the binding. \\
\code{_chld} &
Object corresponding to the currently active child window of the
- object referred to by \code{_}.
+ object referred to by \code{_}. This should seldom be needed.
\end{tabularx}
-For example, supposing '\code{_}' is a \type{WFrame}, the following
-handler should move the active window to the right, if possible:
+For example, supposing \code{_} (underscore) is a \type{WFrame}, the
+following handler should move the active window to the right, if
+possible:
\begin{verbatim}
"_:inc_index(_sub)"
\subsection{Guards}
To suppress error messages, each binding handler may also be accompanied
-by a ''guard'' expression that blocks the handler from being called when
+by a ``guard'' expression that blocks the handler from being called when
the guard condition is not met. Currently the following guard expressions
are supported (for both \code{_sub} and \code{_chld}):
\begin{tabularx}{\linewidth}{lX}
\tabhead{Guard & Description}
- \code{"_sub:non-nil"} & The \code{_sub} parameter must be set. \\
- \code{"_sub:SomeClass"} & The \code{_sub} parameter must be member
+ \codestr{\_sub:non-nil} & The \code{_sub} parameter must be set. \\
+ \codestr{\_sub:SomeClass} & The \code{_sub} parameter must be member
of class \type{SomeClass}. \\
\end{tabularx}
Key presses:
\begin{itemize}
- \item \fnref{kpress}\code{(keyspec, handler [, guard])},
- \item \fnref{kpress_wait}\code{(keyspec, handler [, guard])} and
- \item \fnref{submap}\code{(keyspec, \{ ... more key bindings ... \})}.
+ \item \fnrefx{ioncore}{kpress}, and
+ \fnrefx{ioncore}{kpress_wait}\code{(keyspec, handler [, guard])}.
+ \item \fnrefx{ioncore}{submap}\code{(keyspec, \{ ... more key bindings ... \})}.
+ \item \fnrefx{ioncore}{submap_enter}, and
+ \fnrefx{ioncore}{submap_wait}\code{(handler [, guard])}.
\end{itemize}
Mouse actions:
\begin{itemize}
- \item \fnref{mclick}\code{(buttonspec, handler [, guard])},
- \item \fnref{mdblclick}\code{(buttonspec, handler [, guard])},
- \item \fnref{mpress}\code{(buttonspec, handler [, guard])} and
- \item \fnref{mdrag}\code{(buttonspec, handler [, guard])}.
+ \item \fnrefx{ioncore}{mclick},
+ \fnrefx{ioncore}{mdblclick},
+ \fnrefx{ioncore}{mpress}, and
+ \fnrefx{ioncore}{mdrag}\code{(buttonspec, handler [, guard])}.
\end{itemize}
The actions that most of these functions correspond to should be clear
-and as explained in the reference, \fnref{kpress_wait} is simply
-\fnref{kpress} with a flag set instructing Ioncore wait for all
-modifiers to be released before processing any further actions.
+and as explained in the reference, \fnrefx{ioncore}{kpress_wait} is simply
+\fnrefx{ioncore}{kpress} with a flag set instructing Ioncore wait for
+all modifiers to be released before processing any further actions.
This is to stop one from accidentally calling e.g.
-\fnref{WRegion.rqclose} multiple times in a row. The \fnref{submap}
-function is used to define submaps or ''prefix maps''. The second
-argument to this function is table listing the key press actions
-(\fnref{kpress}) in the submap
+\fnref{WRegion.rqclose} multiple times in a row. The
+\fnrefx{ioncore}{submap} function is used to define submaps or
+``prefix maps''. The second argument to this function is table listing
+the key press actions (\fnrefx{ioncore}{kpress}) in the submap.
+The \fnrefx{ioncore}{submap_enter} handler is called when the submap
+is entered, in which this handler is defined. Likewise, the
+\fnrefx{ioncore}{submap_wait} handler is called when all modifiers
+have been released while waiting for further key presses in the submap.
The parameters \var{keyspec} and \var{buttonspec} are explained below
in detail. The parameter \var{handler} is the handler for the binding,
the \key{Enter} key on the main part of the keyboard has the less common
name \key{Return} while the one the numpad is called \key{KP\_Enter}.
-The \var{keyspec} string may optionally have multiple ''modifier'' names
+The \var{keyspec} string may optionally have multiple ``modifier'' names
followed by a plus sign (\code{+}) as a prefix. X defines the following
modifiers:
-\begin{quotation}
+
\key{Shift}, \key{Control}, \key{Mod1} to \key{Mod5},
\key{AnyModifier} and \key{Lock}.
\index{Shift@\key{Shift}}
\index{ModN@\key{ModN}}
\index{AnyModifier@\key{AnyModifier}}
\index{Lock@\key{Lock}}
-\end{quotation}
X allows binding all of these modifiers to almost any key and while this
list of modifiers does not explicitly list keys such as
\key{Alt}\index{Alt@\key{Alt}} that are common on modern keyboards, such
keys are bound to one of the \key{ModN}. On systems running XFree86
\key{Alt} is usually \key{Mod1}. On Suns \key{Mod1} is the diamond key
-and \key{Alt} something else. One of the ''flying window'' keys on so
+and \key{Alt} something else. One of the ``flying window'' keys on so
called Windows-keyboards is probably mapped to \key{Mod3} if you have
such a key. Use the program \file{xmodmap}\index{xmodmap@\file{xmodmap}}
to find out what exactly is bound where.
specification may end with an optional area name following an @-sign.
Only frames currently support areas, and the supported values in this
case are
-\code{"border"}, \code{"tab"}, \code{"empty_tab"}, \code{"client"} and
-\code{nil} (for the whole frame).
+\codestr{border}, \codestr{tab}, \codestr{empty\_tab}, \codestr{client}
+and \code{nil} (for the whole frame).
For example, the following code binds dragging a tab with the first
button pressed to initiate tab drag\&drop handling:
The default binding configuration contains references to the variables
\code{META} and \code{ALTMETA} instead of directly using the default
-values of \code{"Mod1+"} and \code{""} (nothing). As explained in
+values of \codestr{Mod1+} and \codestr{} (nothing). As explained in
section \ref{sec:walkthrough}, the definitions of these variables
appear in \file{cfg\_ion.lua}. This way you can easily change the the
modifiers used by all bindings in the default configuration without
\begin{tabularx}{\linewidth}{lX}
\tabhead{Menu name & Description}
- \code{windowlist} &
+ \codestr{windowlist} &
List of all client windows. Activating an entry jumps to that window. \\
- \code{workspacelist} &
+ \codestr{workspacelist} &
List of all workspaces. Activating an entry jumps to that workspaces. \\
- \code{focuslist} &
+ \codestr{focuslist} &
List of client windows with recent activity in them, followed by
previously focused client windows. \\
- \code{focuslist_} &
+ \codestr{focuslist\_} &
List of previously focused client windows. \\
- \code{stylemenu} &
+ \codestr{stylemenu} &
List of available \file{look\_*.lua} style files. Activating an entry
loads that style and ask to save the selection. \\
- \code{ctxmenu} &
+ \codestr{ctxmenu} &
Context menu for given object. \\
\end{tabularx}
\subsection{Defining context menus}
-The ''ctxmenu'' is a special menu that is assembled from a defined context
+The ``ctxmenu'' is a special menu that is assembled from a defined context
menu for the object for which the menu was opened for, but also includes
the context menus for the manager objects as submenus.
})
\end{verbatim}
-Some of the same ''modes'' as were available for some bindings
-may also be used: \code{WFrame.tiled}, \code{WFrame.floating},
-and \code{WFrame.transient}.
+Some of the same ``modes'' as were available for some bindings
+may also be used: \codestr{WFrame.tiled}, \codestr{WFrame.floating},
+and \codestr{WFrame.transient}.
\subsection{Displaying menus}
\fnref{mod_menu.grabmenu} &
A special version of \fnref{mod_menu.menu} that grabs the keyboard
and is scrolled with a given key until all modifiers have been released,
- after which the selected entry is activated. This function is meant to
- be used for implementing, for example, Win***s-style \key{Alt-Tab}
- handling.\footnote{See the \file{wcirculate.lua} script in the Ion
- scripts repository \url{http://iki.fi/tuomov/repos/ion-scripts-3/}.} \\
+ after which the selected entry is activated. \\
\end{tabularx}
The \fnrefx{mod_menu}{grabmenu} function takes the extra key parameter, but
--- /dev/null
+\section{The statusbar}
+\label{sec:statusbar}
+
+The \file{mod\_statusbar} module provides a statusbar that adapts to
+layouts of tilings, using only the minimal space needed. Ion only
+supports one adaptive ``status display'' object per screen, so this
+statusbar is mutually exclusive with the embedded mode of \file{mod\_dock}
+docks.
+
+The statusbar is configured in \file{cfg\_statusbar.lua}. Typically,
+the configuration consists of two steps: creating a statusbar with
+\fnref{mod\_statusbar.create}, and then launching the separate
+\command{ion-statusd} status daemon process with
+\fnref{mod_statusbar.launch_statusd}. This latter phase is done
+automatically, if it was not done by the configuration file, but
+the configuration file may pass extra parameters to \command{ion-statusd}
+monitors. (See Section \ref{sec:statusd} for more information on
+writing \command{ion-statusd} monitors.)
+
+A typical \file{cfg\_statusbar.lua} configuration might look as follows:
+
+
+\begin{verbatim}
+-- Create a statusbar
+mod_statusbar.create{
+ screen = 0, -- First screen,
+ pos = 'bl', -- bottom left corner
+ systray = true, -- Swallow systray windows
+
+ -- The template
+ template = "[ %date || load:% %>load || mail:% %>mail_new/%>mail_total ]"
+ .. " %filler%systray",
+}
+
+-- Launch ion-statusd.
+mod_statusbar.launch_statusd{
+ -- Date meter
+ date={
+ -- ISO-8601 date format with additional abbreviated day name
+ date_format='%a %Y-%m-%d %H:%M',
+ },
+}
+\end{verbatim}
+
+
+\subsection{The template}
+
+The template specifies what is shown on the statusbar; for information
+on the other options to \fnref{mod_statusbar.create}, see the reference.
+Strings of the form \codestr{\%spec} tokens specially interpreter by
+the statusbar; the rest appears verbatim. The \code{spec} typically
+consists of the name of the value/meter to display (beginning with a latin
+alphabet), but may be preceded by an alignment specifier and a number
+specifying the minimum width. The alignment specifiers are: \codestr{>}
+for right, \codestr{<} for left, and \codestr{|} for centring. Additionally,
+space following \codestr{\%} (that is, the string \codestr{\% }), adds
+``stretchable space'' at that point. The special string \codestr{\%filler}
+may be used to flush the rest of the template to the right end of
+the statusbar.
+
+The stretchable space works as follows: \file{mod\_statusbar} remembers
+the widest string (in terms of graphical presentation) that it has
+seen for each meter, unless the width has been otherwise constrained.
+If there is stretchable space in the template, it tries to make the
+meter always take this much space, by stretching any space found in
+the direction indicated by the alignment specifier: the opposite
+direction for left or right alignment, and both for centring.
+
+\subsection{The systray}
+
+The special \codestr{\%systray} and \codestr{\%systray\_*}
+(\codestr{*} varying) monitors indicate where to place system tray
+windows. There may be multiple of these. KDE-protocol system tray
+icons are placed in \codestr{\%systray} automatically, unless disabled
+with the \var{systray} option. Otherwise the \var{statusbar} winprop may
+be used to place any window in any particular \codestr{\%systray\_*}.
+
+\subsection{Monitors}
+
+The part before the first
+underscore of each monitor name, describes the script/plugin/module
+that provides the meter, and any configuration should be passed
+in the a corresponding sub-table \fnref{mod_statusbar.launch_statusd}.
+Ion comes with date, load and mail (for plain old mbox)
+\command{ion-statusd} monitor scripts. More may be obtained from
+the scripts repository \cite{scripts}. These included scripts
+provide the following monitors and their options
+
+\subsubsection{Date}
+
+Options: \var{date_format}: The date format in as seen above,
+in the usual \code{strftime} format. \code{formats}: table of
+formats for additional date monitors, the key being the name
+of the monitor (without the \codestr{date\_} prefix).
+
+Monitors: \codestr{date} and other user-specified ones with the
+\codestr{date\_} prefix.
+
+
+\subsubsection{Load}
+
+Options: \var{update_interval}: Update interval in milliseconds
+(default 10s). \var{important_threshold}: Threshold above which
+the load is marked as important (default 1.5), so that the
+drawing engine may be suitably hinted. \var{critical_threshold}:
+Threshold above which the load is marked as critical (default 4.0).
+
+
+Monitors: \codestr{load} (for all three values),
+\codestr{load\_1min}, \codestr{load\_5min} and \codestr{load\_15min}.
+
+
+\subsubsection{Mail}
+
+Options: \var{update_interval}: Update interval in milliseconds
+(default 1min). \var{mbox}: mbox-format mailbox location
+(default \verb!$MAIL!).
+\var{files}: list of additional mailboxes, the key giving the
+name of the monitor.
+
+Monitors: \codestr{mail\_new}, \codestr{mail\_unread},
+\codestr{mail\_total}, and corresponding
+\codestr{mail\_*\_new}, \codestr{mail\_*\_unread}, and \codestr{mail\_*\_total}
+for the additional mailboxes (\codestr{*} varying).
\section{Winprops}
\label{sec:winprops}
-The so-called ''winprops''\index{Winprops} can be used to change how
+The so-called ``winprops''\index{Winprops} can be used to change how
specific windows are handled and to set up some kludges to deal with
badly behaving applications. They are defined by calling the function
\code{defwinprop} with a table containing the properties to set and the
\begin{winprop}{statusbar}{string}
\index{statusbar@\var{statusbar}}
Put the window in the statusbar, in the named tray component,
- (The default tray component is called simply \code{"systray"},
+ (The default tray component is called simply \codestr{systray},
and others you give names to in your custom template, always
- prefixed by \code{"systray_"}.
+ prefixed by \codestr{systray\_}.
\end{winprop}
\begin{winprop}{transient_mode}{string}
\index{transient-mode@\var{transient_mode}}
- \code{"normal"}: No change in behaviour. \code{"current"}:
+ \codestr{normal}: No change in behaviour. \codestr{current}:
The window should be thought of as a transient for the current
active client window (if any) even if it is not marked as a
- transient by the application. \code{"off"}: The window should
+ transient by the application. \codestr{off}: The window should
be handled as a normal window even if it is marked as a
transient by the application.
\end{winprop}
\subsection{Classes, roles and instances}
\label{sec:classesrolesinstances}
-The identification information in the winprop specification is usually the
+The identification information supported are
\var{class}\index{class@\var{class}!winprop},
\var{role}\index{role@\var{role}!winprop},
-\var{instance}\index{instance@\var{instance}!winprop} and
-\var{name}
-of the window. The \var{name} field is a Lua-style regular expression
-matched against the window's title and the rest are strings that must
-exactly match the corresponding window information. It is not necessary
-to specify all of these fields.
+\var{instance}\index{instance@\var{instance}!winprop},
+\var{name}\index{name@\var{name}!winprop},
+\var{is_transient}\index{is-transient@\var{is_transient}!winprop}, and
+\var{is_dockapp}\index{is-dockapp@\var{is_dockapp}!winprop}.
+It is not necessary to specify all of these fields.
+The first three are strings, and must exactly match the
+corresponding information obtained from the window's properties.
+The \var{name} field is a Lua-style regular expression matched against
+the window's title. The \var{is_transient} field is a boolean that can
+be used to include or exclude transients only, while the \var{is_dockapp}
+field is set by Ion for the dock windows of Window Maker dockapp protocol
+dockapps. Usually this is the only information available for these
+\emph{icon} windows.
Ion looks for a matching winprop in the order listed by the following
table. An 'E' indicates that the field must be set in the winprop
\begin{center}
\begin{tabular}{llll}
- \tabhead{\var{class} & \var{role} & \var{instance} & \var{name}}
+ \tabhead{\var{class} & \var{role} & \var{instance} & other}
E & E & E & E \\
E & E & E & * \\
E & E & * & E \\
\end{tabular}
\end{center}
-If there are multiple winprops with other identification information
-the same but different \var{name}, the longest match is chosen.
+If there are multiple matching winprops with the same
+\var{class}, \var{role} and \var{instance}, but other information
+different, the most recently defined one is used.
+
\subsection{Finding window identification}
This method, however, will not work on transients.
\index{transient}
-So-called ''transient windows'' are usually short-lived dialogs (although
+So-called ``transient windows'' are usually short-lived dialogs (although
some programs abuse this property) that have a parent window that they are
-''transient for''. On tiled workspaces Ion displays these windows
-simulatenously with the parent window at the bottom of the same frame.
+``transient for''. On tiled workspaces Ion displays these windows
+simultaneously with the parent window at the bottom of the same frame.
Unfortunately \command{xprop} is stupid and can't cope with this situation,
returning the parent window's properties when the transient is clicked on.
For this reason you'll have to do a little extra work to get the properties
XFree86.}
Finally, it should be mentioned that too many authors these days
-''forget'' to set this vital identification to anything meaningful:
-everything except name is the same for all of the programs's
-windows, for example.
+``forget'' to set this vital identification to anything meaningful:
+everything except name is the same for all of the program's
+windows, for example. Some other programs only set this information
+after the window has been mapped, i.e. the window manager has been
+told to start managing it, which is obviously too late.
+Gtk applications in particular are often guilty on both counts.
+
\subsection{Some common examples}
}
\end{verbatim}
-\subsubsection{Fixing a Mozilla Firebird transient}
-
-Mozilla Firebird (0.7) incorrectly does not set the \code{WM_TRANSIENT_FOR}
-property for the dialog that is used to ask the action to take for a file.
-It, however, sets the the property point to the main window for the save
-dialog. This can be annoying and confusing, as the first dialog is not
-closed before the second is displayed.
-
-We'd like the first dialog to be transient to the main window. The closest
-we can get to that is to consider it transient to the current window (if
-there's one). Unfortunately Firebird does not set any meaningful classes,
-instances or roles for the windows, so we'll have to rely on an ugly title
-match.
-
-\begin{verbatim}
-defwinprop{
- class = "MozillaFirebird-bin",
- name = "Opening .*",
- transient_mode = "current",
-}
-\end{verbatim}
-
\subsubsection{Forcing newly created windows in named frames}
The following winprop should place xterm started with command-line parameter
\end{verbatim}
For this example to work, we have to somehow create a frame named
-\code{sysmonframe}. One way to do this is to make the following
+\codestr{sysmonframe}. One way to do this is to make the following
call in the \key{Mod1+F3} Lua code query:
\begin{verbatim}
Recall that \code{_} points to the multiplexer (frame or screen) in which
the query was opened. Running this code should open a new query prefilled
with the current name of the frame. In our example we would change the
-name to \code{sysmonframe}, but we could just as well have used the
+name to \codestr{sysmonframe}, but we could just as well have used the
default name formed from the frame's class name and an instance number.
\ref{sec:walkthrough}.
How keys and mouse action are bound to functions is described in detail
in \ref{sec:bindings} and in section \ref{sec:winprops} winprops are
-explained. For a reference on exported functions, see section
-\ref{sec:exports}.
+explained. Finally, the statusbar is explained in \ref{sec:statusbar}.
+For a reference on exported functions, see section \ref{sec:exports}.
\section{The configuration files}
\label{sec:conffiles}
for a file, if no extension or path component is given, compiled \file{.lc}
files are attempted before \file{.lua} files.
-All the configuration files are named \file{cfg\_*.lua} with the ''\file{*}''
+All the configuration files are named \file{cfg\_*.lua} with the ``\file{*}''
part varying. The configuration file for each module \file{mod\_modname} is
\file{cfg\_modname.lua}, with \file{modname} varying by the module in
question. The following table summarises these and other configuration
the necessary modules and other configuration files configuring some
more specific aspects of Ion are loaded there. In this section we
take a walk through the stock \file{cfg\_ion.lua}.
-Notice that most of the settings are commented-out (\code{--} is a
+Notice that most of the settings are commented-out (\verb!--! is a
line comment in Lua) in the actual file, as they're the defaults
nevertheless.
-The first thing one in the file is to set
+The first thing done in the file, is to set
\begin{verbatim}
META="Mod1+"
ALTMETA=""
\end{verbatim}
These settings cause most of Ion's key bindings to use \key{Mod1} as the
-modifier key. If \code{ALTMETA} is set, it is used as modifier for the keys
-that don't normally use a modifier. for details on modifiers and key
-binding setup in general see section \ref{sec:bindings}.
+modifier key. If \code{ALTMETA} is set, it is used as modifier for the
+keys that don't normally use a modifier. Note that these two are Lua
+variables used in the configuration files only, and not Ion settings.
+For details on modifiers and key binding setup in general, see section
+\ref{sec:bindings}.
Next we do some basic feel configuration:
for \fnref{ioncore.set} for details.
As a next step, in the actual \file{cfg\_ion.lua} file, we load
-\file{cfg\_defaults.lua}. However, it is merely a conveniency file for
+\file{cfg\_defaults.lua}. However, it is merely a convenience file for
doing exactly what we will going through below, and what is commented
out in the actual file. If you do not want to load what
\file{cfg\_defaults.lua} loads, just comment out the corresponding
Most bindings and menus are defined in \file{cfg\_ioncore.lua}.
Details on making such definitions follow in sections \ref{sec:bindings}
and \ref{sec:menus}, respectively.
-some kludges or ''winprops'' to make some applications behave better
-under Ion are colledted in \file{cfg\_kludges.lua}; see section
+some kludges or ``winprops'' to make some applications behave better
+under Ion are collected in \file{cfg\_kludges.lua}; see section
\ref{sec:winprops} for details. In addition to these, this file
lists quite a few statements of the form
\begin{verbatim}
\input{conf-menus.tex}
\input{conf-winprops.tex}
+
+\input{conf-statusbar.tex}
+
+
\chapter{Introduction}
-This document is an ''advanced user'' manual for Ion, the X11 window manager,
-and version 3 specifically. It is an attempt attempt at documenting what is
-in Ion's configuration files, how to configure Ion by simple modifications
+This document is an ``advanced user'' manual for the X11 window manager
+Ion, version 3. It is an attempt at documenting things that go into Ion's
+configuration files, how to configure Ion by simple modifications
to these files and how to write more complex extensions in Lua, the
lightweight configuration and scripting language used by Ion.
-Readers unfamiliar with Lua is advised to first glance at the Lua manual at
+Readers unfamiliar with Lua might first want to first glance at some
+Lua documentation at
-\centerurl{http://www.lua.org/docs.html}
+\begin{center}
+ \url{http://www.lua.org/docs.html}, or \\
+ \url{http://lua-users.org/wiki/LuaTutorial},
+\end{center}
-and perhaps some tutorial pages at the lua-users wiki:
-
-\centerurl{http://lua-users.org/wiki/LuaTutorial}
+although this should not be strictly necessary for basic modifications
+of configuration files for anyone with at least some familiarity with
+programming languages.
Back in this document, first in chapter \ref{chap:prelim} some key
-concepts and relations are explained. These include the module system
-and Ion's object and class hierarchies. While it might not at first
-occur that knowing such things would be necessary to \emph{configure}
-a program, this material is essential because of the object-oriented
-nature of most of Ion's scripting interface.
-
-The new user, fed up with the default key bindings and eager to just
-quickly configure Ion to his liking may question the reasons for
-exposing the ''heavy'' internal OO structure in the scripting and
-configuration interface. I'm not the one to blame him for that.
-Sure it would be faster to configure Ion to everyone's liking
-if a simpler binding configuration interface was provided. Such an
-interface would, however, also be far more limited and make writing
-extensions more complicated and the advantages from using a real
-scripting language would be partly lost. One more advantage from
-a rich scripting and configuration interface is that it allows
-implementing scripts to read alternate configuration file formats,
-ones that could be, for example, modified by external configuration tools.
-
-In chapter \ref{chap:config} the very basic Ion configuration know-how
-is provided. All the different configuration files and their locations
-are explained and instructions are given to allow the reader to
-configure bindings and so-called ''winprops''. Chapter \ref{chap:gr}
-explains the notion of drawing engines and graphical styles and how to
-write new looks for Ion and more advanced aspects of Ion's scripting
-interface are documented in chapter \ref{chap:tricks} (a work in
-progress).
-
+concepts and relations are explained. These include the module system,
+and Ion's object (or ``region'') and class hierarchies. While it may
+not be necessary to study the latter for basic copy-paste modifications
+of configuration files -- for that you should not really need this
+manual either -- it is, however, essential to for more extensive
+customisation, due to the semi-object-oriented nature of most of
+Ion's scripting interface. Knowing the different object types also
+helps dealing with the different binding ``contexts'' (see
+Section \ref{sec:bindings}) that to some extent mirror these classes.
+
+The new user, fed up with the default key bindings and eager to
+just quickly configure Ion to his liking, may therefore just want
+to skip to Chapter \ref{chap:config}, and attempt to work from therefore.
+That chapter provides the very basic Ion configuration know-how
+is provided: all the different configuration files and their locations
+are explained, instructions are given to allow the reader to
+configure bindings and so-called ``winprops'', and the statusbar
+templates are also explained.
+
+Next, Chapter \ref{chap:gr} explains the notion of drawing engines
+and graphical styles and how to write new looks for Ion. More advanced
+aspects of Ion's scripting interface are documented in Chapter
+\ref{chap:tricks}.
Finally, most of the functions provided by Ion's scripting interface
-are listed and documented in the Function reference in chapter
-\ref{sec:exports}. At the end of the document is an alphabetical
-listing of all these functions.
-
+are listed and documented in the Function reference in Chapter
+\ref{sec:exports}. At the end of the document an alphabetical
+listing of all these functions may be found.
\section{C coding style}
-If you want to submit patches to Ion, you MUST follow my coding
+If you want to submit patches to Ion, you \textbf{must} follow my coding
style, even if you think it is the root of all evil. We don't want
the code to be an incomprehensible mess of styles and I have better
things to do than fix other people's style to match mine. The style
\subsection{Whitespace}
\begin{itemize}
- \item Indentations of 4 with \emph{tab size=4}.
+ \item Indentations of 4 with spaces.
\item No extra spaces between operators, delimiters etc. except
\begin{itemize}
This chapter first gives in section \ref{sec:engines} a general outline
of how drawing engines are used, of style specifications and then
in section \ref{sec:defaultde} describes how to specify styles
-for the default drawing engine.
+for the default drawing engine. Some additional settings and
+user attributes are explained in Sections \ref{sec:grmisc}.
+
\section{Drawing engines, style specifications and sub-styles}
\label{sec:engines}
Ion's drawing routines are abstracted into so-called drawing engine
modules that can, again depending on the system, be dynamically
-loaded as needed. The drawing engine modules provide ''brushes''
+loaded as needed. The drawing engine modules provide ``brushes''
that objects can use to draw some high-level primitives such
as borders and text boxes (in addition to simple text and rectangle
drawing) on their windows and configure e.g. the shape and
element1-element2-...-elementn
\end{verbatim}
-An example of such a style specification is \code{tab-frame};
+An example of such a style specification is \codestr{tab-frame};
see the table in subsection \ref{sec:styles} for more styles.
When an object asks for a brush of certain style, the selected
drawing engine will attempt to find the closest match to this
specification. The styles/brushes defined by the drawing engines
-may have asterisks (\verb!*!) as some of the elements indicating
+may have asterisks (\codestr{*}) as some of the elements indicating
a match to anything. Exact matches are preferred to asterisk
matches and longer matches to shorter. For example, let a brush
-for style \code{foo-bar-baz} be queried, then the following
+for style \codestr{foo-bar-baz} be queried, then the following
brushes are in order of preference:
\begin{verbatim}
\begin{tabularx}{\linewidth}{lX}
\tabhead{Style name & Description}
-\code{frame} & Style for frames.
- Substyle attributes: \code{active}/\code{inactive}
+\codestr{frame} & Style for frames.
+ Substyle attributes: \codestr{active}/\codestr{inactive}
(mutually exclusive) and
- \code{quasiactive}\nobreak/\code{not_quasiactive}.
+ \codestr{quasiactive}/\codestr{not\_quasiactive}.
A frame is ``quasiactive'' when an active region
- has a backlink to it, such as a detached window. \\
-\code{frame-tiled} & A more specific style for tiled frames.
- Substyle attributes as for \code{frame}. \\
-\code{frame-tiled-alt} & An alternative style for tiled frames.
+ has a back-link to it, such as a detached window. \\
+\codestr{frame-tiled} & A more specific style for tiled frames.
+ Substyle attributes as for \codestr{frame}. \\
+\codestr{frame-tiled-alt} & An alternative style for tiled frames.
Often used to disable the tab-bar. \\
-\code{frame-floating} & A more specific style for floating
+\codestr{frame-floating} & A more specific style for floating
frames. \\
-\code{frame-transient} & A more specific style for frames
+\codestr{frame-transient} & A more specific style for frames
containing transient windows. \\
\end{tabularx}
\begin{tabularx}{\linewidth}{lX}
\tabhead{Style name & Description}
-\code{tab} & Style for frames' tabs and menu entries.
+\codestr{tab} & Style for frames' tabs and menu entries.
Substyle attributes:
- \code{active}\nobreak/\code{inactive} and
- \code{selected}\nobreak/\code{unselected} \\
-\code{tab-frame} & A more specific style for frames' tabs.
+ \codestr{active}/\codestr{inactive} and
+ \codestr{selected}/\codestr{unselected} \\
+\codestr{tab-frame} & A more specific style for frames' tabs.
Additional substyle attributes include:
- \code{tagged}\nobreak/\code{not_tagged},
- \code{dragged}\nobreak/\code{not_dragged},
- \code{activity}\nobreak/\code{no_activity} and
- \code{quasiactive}\nobreak/\code{not_quasiactive}. \\
-\code{tab-frame-tiled}, & \\
-\code{tab-frame-tiled-alt}, & \\
-\code{tab-frame-floating}, & \\
-\code{tab-frame-transient} & More specific styles for frames in the
+ \codestr{tagged}/\codestr{not\_tagged},
+ \codestr{dragged}/\codestr{not\_dragged},
+ \codestr{activity}/\codestr{no\_activity},
+ \codestr{quasiactive}/\codestr{not\_quasiactive}. \\
+\codestr{tab-frame-tiled}, & \\
+\codestr{tab-frame-tiled-alt}, & \\
+\codestr{tab-frame-floating}, & \\
+\codestr{tab-frame-transient} & More specific styles for frames in the
different modes. \\
-\code{tab-menuentry} & A more specific style for entries in \type{WMenu}s.
- Additional substyle attributes include \code{submenu} and
- occasionally also \code{activity} is used.\\
-\code{tab-menuentry-bigmenu} &
+\codestr{tab-menuentry} & A more specific style for entries in \type{WMenu}s.
+ Additional substyle attributes include \codestr{submenu} and
+ occasionally also \codestr{activity} is used.\\
+\codestr{tab-menuentry-bigmenu} &
An alternate style for entries in \type{WMenu}s. \\
\end{tabularx}
\begin{tabularx}{\linewidth}{lX}
\tabhead{Style name & Description}
-\code{input} & A style for \type{WInput}s. \\
-\code{input-edln} & A more specific style for \type{WEdln}s.
- Substyle attributes: \code{selection} for selected text and
- \code{cursor} for the cursor indicating current editing point. \\
-\code{input-message} & A more specific style for \type{WMessage}s. \\
-\code{input-menu} & A more specific style for \type{WMenu}s. \\
-\code{input-menu-bigmenu} & An alternate style for \type{WMenu}s. \\
-\code{moveres_display} & The box displaying position/size when
+\codestr{input} & A style for \type{WInput}s. \\
+\codestr{input-edln} & A more specific style for \type{WEdln}s.
+ Substyle attributes: \codestr{selection} for selected text and
+ \codestr{cursor} for the cursor indicating current editing point. \\
+\codestr{input-message} & A more specific style for \type{WMessage}s. \\
+\codestr{input-menu} & A more specific style for \type{WMenu}s. \\
+\codestr{input-menu-bigmenu} & An alternate style for \type{WMenu}s. \\
+\codestr{moveres\_display} & The box displaying position/size when
moving or resizing frames. \\
-\code{dock} & The dock. \\
+\codestr{stdisp} & Any status display. \\
+\codestr{stdisp-dock} & The dock. \\
+\codestr{stdisp-statusbar} & The statusbar. Substyles include:
+ the name of any monitor/meter (such as \codestr{date}), and
+ the supplied hint. Typical hints are: \codestr{normal},
+ \codestr{important}, and \codestr{critical}. \\
\end{tabularx}
The \fnref{gr.select_engine} function sees if the engine
given as argument is registered (the default drawing engine is
-simply called ''de''). If the engine could not be found, it
+simply called ``de''). If the engine could not be found, it
tries to load a module of the same name. If the engine still
-is not registered, \fnref{gr.select_engine} returns \code{false}
+is not registered, \fnref{gr.select_engine} returns \codestr{false}
and in this case we also exit the style setup script.
If the engine was found, \fnref{gr.select_engine} sees that
further requests for brushes are forwarded to that engine
-and returns \code{true}.
+and returns \codestr{true}.
Before defining new styles it may be a good idea to clear old
styles from memory so if the old configuration defines more
\begin{tabularx}{\linewidth}{lX}
\tabhead{Field & Description}
\var{highlight_colour} &
- Colour for the ''highlight'' part of a border. \\
+ Colour for the ``highlight'' part of a border. \\
\var{shadow_colour} &
- Colour for the ''highlight'' part of a border. \\
+ Colour for the ``shadow'' part of a border. \\
\var{foreground_colour} &
Colour for the normal drawing operations, e.g. text. \\
\var{background_colour} &
Window background colour (unless transparency is enabled) and
background colour boxes. \\
\var{padding_colour} &
- Colour for the ''padding'' part of a border border. Set to
+ Colour for the ``padding'' part of a border border. Set to
\var{background_colour} if unset. \\
\end{tabularx}
\begin{tabularx}{\linewidth}{lX}
\tabhead{Field & Description}
\var{border_style} & A string indicating the style of border; one of
- elevated/inlaid/ridge/groove as seen in the
- above sketch. \\
+ \codestr{elevated}/\codestr{inlaid}/\codestr{ridge}/\codestr{groove}
+ as seen in the above sketch. \\
\var{border_sides} & A string indicating which sides of the border
- to draw: all/tb/lr for all, top and bottom, and
- left and right. To control between left/right
- and top/bottom, use the pixel options below. \\
+ to draw: \codestr{all}/\codestr{tb}/\codestr{lr} for all,
+ top and bottom, and left and right. To control between
+ left/right and top/bottom, use the pixel options below. \\
\var{highlight_pixels} &
Width of the highlight part of the border in pixels. \\
\var{shadow_pixels} &
\var{font} & Font to be used in text-drawing operations; standard X font
name. \\
\var{text_align} & How text is to be aligned in text boxes/tabs; one of
- the strings left\nobreak/right\nobreak/center. \\
+ the strings \codestr{left}/\codestr{right}/\codestr{center}. \\
\end{tabularx}
\subsubsection{Substyles}
As discussed in previous sections, styles may have substyles to e.g.
-indicate different states of the object being drawn. The ''de'' engine
+indicate different states of the object being drawn. The ``de'' engine
limits what can be configured in substyles to the set of colours in the
first table above, but also specifically interprets for the main style
-\code{tab-frame} the substyles \code{*-*-tagged} and \code{*-*-*-dragged}
+\codestr{tab-frame} the substyles \codestr{*-*-tagged} and \codestr{*-*-*-dragged}
by, respectively, drawing a right angle shape at the top right corner
of a tab and by shading the tab with a stipple pattern. Also for
-menus the substyles \code{*-*-submenu} are handled as a special case.
+menus the substyles \codestr{*-*-submenu} are handled as a special case.
Substyles are defined with the function \fnref{de.substyle} within the
table defining the main style. The parameters to this function are
\section{Miscellaneous settings}
+\label{sec:grmisc}
+
+
+\subsection{Frame user attributes}
+
+The function \fnref{WFrame.set_grattr} may be used to give frames
+(and their tabs) arbitrary extra attributes to be passed to the
+drawing engine. Hence, by configuring such substyles in the style
+configuration files, and turning on the attribute when needed,
+scripts may display visual cues related to the frame. There is
+also one extra attribute specially interpreted by the default
+drawing engine: the \codestr{numbered} attribute, which causes
+numbers to be displayed on the tabs.
+
+
+\subsection{Extra fields for style \codestr{frame}}
The following style fields are independent of the drawing engine used,
but are related to objects' styles and therefore configured in the drawing
engine configuration file.
-\subsection{Extra fields for style \code{frame}}
-
\begin{tabularx}{\linewidth}{lX}
\tabhead{Field & Description}
\code{bar} & Controls the style of the tab-bar. Possible values
- are the strings \code{"none"}, \code{"inside"}, \code{"outside"}
- and \code{"shaped"}, with the last providing the PWM-style
+ are the strings \codestr{none}, \codestr{inside}, \codestr{outside}
+ and \codestr{shaped}, with the last providing the PWM-style
tab-bars for floating frames. \\
\code{floatframe_tab_min_w} & Minimum tab width in pixels for
the shaped style, given that this number times number of tabs
interval $(0, 1]$.
\end{tabularx}
-\subsection{Extra fields for style \code{dock}}
+
+
+\subsection{Extra fields for style \codestr{dock}}
\begin{tabularx}{\linewidth}{lX}
\tabhead{Field & Description}
\code{outline_style} & How borders are drawn:
- \code{"none"} -- no border,
- \code{"all"} -- border around whole dock,
- \code{"each"} -- border around each dockapp. \\
-\code{tile_size} & A table with entries \code{width} and \code{height},
+ \codestr{none} -- no border,
+ \codestr{all} -- border around whole dock,
+ \codestr{each} -- border around each dockapp. \\
+\code{tile_size} & A table with entries \codestr{width} and \codestr{height},
indicating the width and height of tiles in pixels.
\end{tabularx}
when the \type{WObj}
\code{destroy_obj}\index{destroy-obj@\code{destroy_obj}}
function that calls watches, the deinit routine and frees memory may
-be called directly. In all other cases the
-\code{defer_destroy}\index{defer-destroy@\code{defer_destroy}}
+be called directly. In all other cases the \code{mainloop_defer_destroy}%
+\index{mainloop-defer-destroy@\code{mainloop_defer_destroy}}
function should be used to defer the call of \code{destroy_obj} until
Ioncore returns to its main event loop.
that wants to get rid of the object. This is the case, for example,
when the function created a frame to manage some other object but for
some reason failed to reparent the object to this frame.
- \item In a deferred action handler set with
- \code{defer_action}\index{defer-action@\code{defer_action}}.
+ \item In a deferred action handler set with \code{mainloop_defer_action}%
+ \index{mainloop-defer-action@\code{mainloop_defer_action}}.
Like deferred destroys, other deferred actions are called when
Ioncore has returned to the main loop.
\item You are absolute sure that C code outside your code has no
If there are no serious side effects from deferring destroying the
object or you're unsure whether it is safe to destroy the object
-immediately, use \code{defer_destroy}.
+immediately, use \code{mainloop_defer_destroy}.
\subsection{The types \code{char*} and \code{const char*} as function
parameters and return values}
For further reference a copy must be made. \\
\code{char*} & The string is the caller's responsibility and it
\emph{must} free it when no longer needed. &
- The called function may modify the string but the ''owner'' of
+ The called function may modify the string but the ``owner'' of
the string is case-dependant. \\
\end{tabularx}
Context:
-[TAG ion-doc-3ds-20070318
-Tuomo Valkonen <tuomov@iki.fi>**20070318200902]
+[TAG ion-doc-3rc-20070506
+Tuomo Valkonen <tuomov@iki.fi>**20070506144001]
\section{Functions defined in \file{ioncore}}
\label{sec:ioncoreref}
-\input{ioncore-fns.tex}
+\input{ioncore.exports}
\section{Functions defined in \file{mod\_tiling}}
\label{sec:tilingref}
-\input{mod_tiling-fns.tex}
+\input{mod_tiling.exports}
%\section{Functions defined in \file{mod\_panews}}
%\label{sec:panewsref}
-%\input{mod_panews-fns.tex}
+%\input{mod_panews.exports}
\section{Functions defined in \file{mod\_query}}
\label{sec:queryref}
-\input{mod_query-fns.tex}
+\input{mod_query.exports}
\section{Functions defined in \file{mod\_menu}}
\label{sec:menuref}
-\input{mod_menu-fns.tex}
+\input{mod_menu.exports}
\section{Functions defined in \file{mod\_dock}}
\label{sec:dockref}
-\input{mod_dock-fns.tex}
+\input{mod_dock.exports}
\section{Functions defined in \file{mod\_sp}}
\label{sec:spref}
-\input{mod_sp-fns.tex}
+\input{mod_sp.exports}
\section{Functions defined in \file{mod\_statusbar}}
\label{sec:statusbarref}
-\input{mod_statusbar-fns.tex}
+\input{mod_statusbar.exports}
\section{Functions defined in \file{de}}
\label{sec:deref}
-\input{de-fns.tex}
+\input{de.exports}
\section{Hooks}
\label{sec:hookref}
\input{hookref}
+
+\section{Miscellaneous}
+\label{sec:miscref}
+\input{miscref}
|-->WHook
|-->WTimer
|-->WMoveresMode
- |-->WMgmtMode (mod_mgmtmode)
|-->WRegion
| |-->WClientWin
| |-->WWindow
\var{switchto} & bool & Do we want to switch to the client window. \\
\var{jumpto} & bool & Do we want to jump to the client window. \\
\var{userpos} & bool & Geometry set by user. \\
- \var{dockapp} & bool & Client window is a dockapp. \\
+ \var{dockapp} & bool & Client window is a dock-app. \\
\var{maprq} & bool & Map request (and not initialisation scan). \\
\var{gravity} & number & Window gravity. \\
\var{geom} & table & Requested geometry; \var{x}, \var{y}, \var{w}, \var{h}.\\
\begin{tabularx}{\linewidth}{llX}
\tabhead{Field & Type & Description}
\var{reg} & WFrame & The frame in question \\
- \var{mode} & string & \var{"switchonly"}, \var{"reorder"},
- \var{"add"} or \var{"remove"} \\
- \var{sw} & bool & Switch occured \\
+ \var{mode} & string & \codestr{switchonly}, \codestr{reorder},
+ \codestr{add} or \codestr{remove} \\
+ \var{sw} & bool & Switch occurred \\
\var{sub} & WRegion & The managed region (primarily) affected \\
\end{tabularx}
\end{funcdesc}
\hookparams{()}
\begin{funcdesc}
Called when Ion has done all initialisation and is almost ready to
- enter the mainloop, except no windows are yet being managed.
+ enter the main-loop, except no windows are yet being managed.
\end{funcdesc}
\end{function}
\end{function}
+\begin{function}
+ \index{ioncore-submap-ungrab-hook@\code{ioncore_submap_ungrab_hook}}
+ \hookname{ioncore_submap_ungrab_hook}
+ \hookparams{()}
+ \begin{funcdesc}
+ This hook is used to signal whenever Ion leaves the submap grab mode.
+ \end{funcdesc}
+\end{function}
+
+
\begin{function}
\index{tiling-placement-alt@\code{tiling_placement_alt}}
\hookname{tiling_placement_alt}
the moment) to be placed \\
\var{mp} & \type{table} & This table contains the same fields as
the parameter of \fnref{clientwin_do_manage_alt} \\
- \var{res_frame} & \type{WFrame} & A succesfull handler should
+ \var{res_frame} & \type{WFrame} & A successful handler should
return the target frame here. \\
\end{tabularx}
This hook is just for placing within a given workspace after the
\code{unset_manager} & The region no longer has a manager. \\
\code{set_manager} & The region now has a manager. \\
\code{tag} & Tagging state has changed. \\
- \code{pseudoactivated} & The region has become pseudoactive
+ \code{pseudoactivated} & The region has become pseudo-active
(see below). \\
- \code{pseudoinactivated} & The region is no longer pseudoactive. \\
+ \code{pseudoinactivated} & The region is no longer pseudo-active. \\
\end{tabularx}
- A region is pseudoactive, when a) it is itself not active (does
+ A region is pseudo-active, when a) it is itself not active (does
not not have the focus, and may not even have a window that could
have it), but b) some region managed by it is active.
\end{funcdesc}
\BOOKMARK [2][-]{subsection.3.5.2}{ Classes, roles and instances}{section.3.5}
\BOOKMARK [2][-]{subsection.3.5.3}{ Finding window identification}{section.3.5}
\BOOKMARK [2][-]{subsection.3.5.4}{ Some common examples}{section.3.5}
+\BOOKMARK [1][-]{section.3.6}{ The statusbar}{chapter.3}
+\BOOKMARK [2][-]{subsection.3.6.1}{ The template}{section.3.6}
+\BOOKMARK [2][-]{subsection.3.6.2}{ The systray}{section.3.6}
+\BOOKMARK [2][-]{subsection.3.6.3}{ Monitors}{section.3.6}
\BOOKMARK [0][-]{chapter.4}{ Graphical styles}{}
\BOOKMARK [1][-]{section.4.1}{ Drawing engines, style specifications and sub-styles}{chapter.4}
\BOOKMARK [2][-]{subsection.4.1.1}{ Known styles and substyles}{section.4.1}
\BOOKMARK [2][-]{subsection.4.2.2}{ Defining the styles}{section.4.2}
\BOOKMARK [2][-]{subsection.4.2.3}{ An example}{section.4.2}
\BOOKMARK [1][-]{section.4.3}{ Miscellaneous settings}{chapter.4}
-\BOOKMARK [2][-]{lstlisting.4.-399}{ Extra fields for style !frame!}{section.4.3}
-\BOOKMARK [2][-]{lstlisting.4.-421}{ Extra fields for style !dock!}{section.4.3}
+\BOOKMARK [2][-]{subsection.4.3.1}{ Frame user attributes}{section.4.3}
+\BOOKMARK [2][-]{subsection.4.3.2}{ Extra fields for style `frame'}{section.4.3}
+\BOOKMARK [2][-]{subsection.4.3.3}{ Extra fields for style `dock'}{section.4.3}
\BOOKMARK [0][-]{chapter.5}{ Scripting}{}
\BOOKMARK [1][-]{section.5.1}{ Hooks}{chapter.5}
\BOOKMARK [1][-]{section.5.2}{ Referring to regions}{chapter.5}
\BOOKMARK [2][-]{subsection.5.2.1}{ Direct object references}{section.5.2}
\BOOKMARK [2][-]{subsection.5.2.2}{ Name-based lookups}{section.5.2}
\BOOKMARK [1][-]{section.5.3}{ Alternative winprop selection criteria}{chapter.5}
-\BOOKMARK [1][-]{lstlisting.5.-462}{ Writing !ion-statusd! monitors}{chapter.5}
+\BOOKMARK [1][-]{lstlisting.5.-266}{ Writing !ion-statusd! monitors}{chapter.5}
\BOOKMARK [0][-]{chapter.6}{ Function reference}{}
\BOOKMARK [1][-]{section.6.1}{ Functions defined in ioncore}{chapter.6}
\BOOKMARK [2][-]{subsection.6.1.1}{ WClientWin functions}{section.6.1}
\BOOKMARK [2][-]{subsection.6.1.3}{ WGroup functions}{section.6.1}
\BOOKMARK [2][-]{subsection.6.1.4}{ WGroupCW functions}{section.6.1}
\BOOKMARK [2][-]{subsection.6.1.5}{ WGroupWS functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.6}{ WInfoWin functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.7}{ WMPlex functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.8}{ WMoveresMode functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.9}{ WRegion functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.10}{ WRootWin functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.11}{ WScreen functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.12}{ WWindow functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.13}{ global functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.14}{ gr functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.15}{ string functions}{section.6.1}
-\BOOKMARK [2][-]{subsection.6.1.16}{ table functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.6}{ WHook functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.7}{ WInfoWin functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.8}{ WMPlex functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.9}{ WMoveresMode functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.10}{ WRegion functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.11}{ WRootWin functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.12}{ WScreen functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.13}{ WTimer functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.14}{ WWindow functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.15}{ global functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.16}{ gr functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.17}{ string functions}{section.6.1}
+\BOOKMARK [2][-]{subsection.6.1.18}{ table functions}{section.6.1}
\BOOKMARK [1][-]{section.6.2}{ Functions defined in mod\137tiling}{chapter.6}
\BOOKMARK [2][-]{subsection.6.2.1}{ WSplit functions}{section.6.2}
\BOOKMARK [2][-]{subsection.6.2.2}{ WSplitInner functions}{section.6.2}
\BOOKMARK [2][-]{subsection.6.7.1}{ WStatusBar functions}{section.6.7}
\BOOKMARK [1][-]{section.6.8}{ Functions defined in de}{chapter.6}
\BOOKMARK [1][-]{section.6.9}{ Hooks}{chapter.6}
+\BOOKMARK [1][-]{section.6.10}{ Miscellaneous}{chapter.6}
+\BOOKMARK [2][-]{subsection.6.10.1}{ Size policies}{section.6.10}
\BOOKMARK [0][-]{appendix.A}{ The GNU General Public License}{}
\BOOKMARK [0][-]{appendix.B}{ Full class hierarchy visible to Lua-side}{}
-\BOOKMARK [0][-]{section*.17}{Index}{}
+\BOOKMARK [0][-]{section*.19}{Index}{}
+\BOOKMARK [0][-]{section*.21}{Bibliography}{}
\title{Configuring and extending Ion3 with Lua}
\author{Tuomo Valkonen \\ tuomov at iki.fi}
-\date{2007-03-18}
+\date{2007-05-06}
\makeindex
\maketitle
Configuring and extending Ion3 with Lua\\
-Copyright \copyright\ 2003--2005 Tuomo Valkonen.
+Copyright \copyright\ 2003--2007 Tuomo Valkonen.
This document is free; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This document is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-chapter entitled ''GNU General Public License'' for more details.
+chapter entitled ``GNU General Public License'' for more details.
\tableofcontents
\printindex
+\begin{thebibliography}{9}
+ \bibitem{scripts} The Ion 3 scripts repository,
+ \url{http://iki.fi/tuomov/repos/ion-scripts-3/}.
+\end{thebibliography}
+
\end{document}
-This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2007.2.4) 18 MAR 2007 22:35
+This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2007.4.8) 6 MAY 2007 17:46
entering extended mode
**./images.tex
(./images.tex
(Font) <8> on input line 235.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <6> on input line 235.
-l2hSize :tex2html_wrap_inline1041:7.0626pt::0.0pt::7.1201pt.
+l2hSize :tex2html_wrap_inline1055:7.0626pt::0.0pt::7.1201pt.
[1
]
-l2hSize :tex2html_wrap_inline1045:7.48248pt::0.0pt::48.86426pt.
+l2hSize :tex2html_wrap_inline1059:7.48248pt::0.0pt::48.86426pt.
[2
]
-l2hSize :tex2html_wrap_inline2020:8.7125pt::8.7125pt::23.6642pt.
+l2hSize :tex2html_wrap_inline2241:8.7125pt::8.7125pt::23.6642pt.
[3
]
-l2hSize :tex2html_wrap_inline6387:7.5626pt::7.5626pt::14.53923pt.
+l2hSize :tex2html_wrap_inline5502:7.5626pt::7.5626pt::14.53923pt.
[4
]
-l2hSize :tex2html_wrap_inline6389:7.5626pt::7.5626pt::14.53923pt.
+l2hSize :tex2html_wrap_inline5504:7.5626pt::7.5626pt::14.53923pt.
[5
]
-l2hSize :tex2html_wrap_inline9409:8.7125pt::8.7125pt::86.9574pt.
+l2hSize :tex2html_wrap_inline7754:8.7125pt::8.7125pt::86.9574pt.
[6
] (./images.aux) )
Here is how much of TeX's memory you used:
- 4443 strings out of 94501
- 62984 string characters out of 1175795
- 122206 words of memory out of 1000000
- 7587 multiletter control sequences out of 10000+50000
+ 4467 strings out of 94501
+ 63452 string characters out of 1175795
+ 123525 words of memory out of 1000000
+ 7611 multiletter control sequences out of 10000+50000
7874 words of font info for 24 fonts, out of 500000 for 2000
580 hyphenation exceptions out of 8191
28i,5n,21p,200b,182s stack positions out of 1500i,500n,5000p,200000b,5000s
# Associate images original text with physical files.
+$key = q/-1;MSF=1.6;LFS=11;AAT/;
+$cached_env_img{$key} = q|<IMG
+ WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="|."$dir".q|img4.png"
+ ALT="$-1$">|;
+
+$key = q/(0,1];MSF=1.6;LFS=11;AAT/;
+$cached_env_img{$key} = q|<IMG
+ WIDTH="42" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
+ SRC="|."$dir".q|img3.png"
+ ALT="$(0, 1]$">|;
+
+$key = q/N=1{ldots}5;MSF=1.6;LFS=11;AAT/;
+$cached_env_img{$key} = q|<IMG
+ WIDTH="82" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="|."$dir".q|img2.png"
+ ALT="$N=1{\ldots} 5$">|;
+
+$key = q/-2;MSF=1.6;LFS=11;AAT/;
+$cached_env_img{$key} = q|<IMG
+ WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="|."$dir".q|img5.png"
+ ALT="$-2$">|;
+
+$key = q/n;MSF=1.6;LFS=11;AAT/;
+$cached_env_img{$key} = q|<IMG
+ WIDTH="15" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
+ SRC="|."$dir".q|img1.png"
+ ALT="$n$">|;
+
+$key = q/{t,m,b}times{t,c,b};MSF=1.6;LFS=11;AAT/;
+$cached_env_img{$key} = q|<IMG
+ WIDTH="142" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
+ SRC="|."$dir".q|img6.png"
+ ALT="$\{t,m,b\}\times\{t,c,b\}$">|;
+
1;
\usepackage{calc}
-\urlstyle{rm}%
-\providecommand{\centerurl}[1]{\begin{center}\url{#1}\end{center}}
+\urlstyle{tt}
%
\providecommand{\note}[1]{\color{red}**#1**}%
%
\providecommand{\key}[1]{\textbf{#1}}%
\providecommand{\code}[1]{\texttt{#1}}%
+\providecommand{\codestr}[1]{`\texttt{#1}'}%
\providecommand{\var}[1]{\texttt{#1}}%
\providecommand{\command}[1]{\texttt{#1}}
\title{Configuring and extending Ion3 with Lua}
\author{Tuomo Valkonen \\tuomov at iki.fi}
-\date{2007-03-18}
+\date{2007-05-06}
\makeindex
\stepcounter{section}
\stepcounter{section}
{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline1041}%
+\lthtmlinlinemathA{tex2html_wrap_inline1055}%
$n$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}
\stepcounter{subsection}
\stepcounter{subsection}
{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline1045}%
+\lthtmlinlinemathA{tex2html_wrap_inline1059}%
$N=1{\ldots} 5$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}
\stepcounter{subsection}
\stepcounter{subsubsection}
\stepcounter{subsubsection}
+\stepcounter{section}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsection}
+\stepcounter{subsubsection}
+\stepcounter{subsubsection}
\stepcounter{subsubsection}
\stepcounter{chapter}
\stepcounter{section}
\stepcounter{subsection}
\stepcounter{section}
\stepcounter{subsection}
+\stepcounter{subsection}
{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline2020}%
+\lthtmlinlinemathA{tex2html_wrap_inline2241}%
$(0, 1]$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}
\stepcounter{subsection}
\stepcounter{subsection}
\stepcounter{subsection}
+\stepcounter{subsection}
{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline6387}%
+\lthtmlinlinemathA{tex2html_wrap_inline5502}%
$-1$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}
{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline6389}%
+\lthtmlinlinemathA{tex2html_wrap_inline5504}%
$-2$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}
\stepcounter{subsection}
\stepcounter{subsection}
\stepcounter{subsection}
+\stepcounter{subsection}
\stepcounter{section}
\stepcounter{subsection}
\stepcounter{subsection}
\stepcounter{section}
\stepcounter{subsection}
{\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline9409}%
+\lthtmlinlinemathA{tex2html_wrap_inline7754}%
$\{t,m,b\}\times\{t,c,b\}$%
\lthtmlinlinemathZ
\lthtmlcheckvsize\clearpage}
\stepcounter{subsection}
\stepcounter{section}
\stepcounter{section}
+\stepcounter{section}
+\stepcounter{subsection}
\appendix
\stepcounter{chapter}
\addtocounter{enumi}{-1}
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html19"
+<A NAME="tex2html18"
HREF="node1.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html13"
+<A NAME="tex2html12"
HREF="http://iki.fi/tuomov/ion/">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png">
-<A NAME="tex2html15"
+<A NAME="tex2html14"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html17"
+<A NAME="tex2html16"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html20"
+<B> Next:</B> <A NAME="tex2html19"
HREF="node1.html">Contents</A>
-<B> Up:</B> <A NAME="tex2html14"
+<B> Up:</B> <A NAME="tex2html13"
HREF="http://iki.fi/tuomov/ion/">Ion homepage</A>
- <B> <A NAME="tex2html16"
+ <B> <A NAME="tex2html15"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html18"
+ <B> <A NAME="tex2html17"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
<P ALIGN="CENTER"><STRONG>Tuomo Valkonen</STRONG></P>
<P ALIGN="CENTER"><I>tuomov at iki.fi</I></P>
-<P ALIGN="CENTER"><STRONG>2007-03-18</STRONG></P>
+<P ALIGN="CENTER"><STRONG>2007-05-06</STRONG></P>
</DIV>
<P>
Configuring and extending Ion3 with Lua
<BR>
-Copyright © 2003-2005 Tuomo Valkonen.
+Copyright © 2003-2007 Tuomo Valkonen.
<P>
This document is free; you can redistribute it and/or modify
This document is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-chapter entitled ''GNU General Public License'' for more details.
+chapter entitled ``GNU General Public License'' for more details.
<P>
<BR><HR>
<A NAME="CHILD_LINKS"></A>
<UL CLASS="ChildLinks">
-<LI><A NAME="tex2html21"
+<LI><A NAME="tex2html20"
HREF="node1.html">Contents</A>
-<LI><A NAME="tex2html22"
+<LI><A NAME="tex2html21"
HREF="node2.html"><SPAN CLASS="arabic">1</SPAN>. Introduction</A>
-<LI><A NAME="tex2html23"
+<LI><A NAME="tex2html22"
HREF="node3.html"><SPAN CLASS="arabic">2</SPAN>. Preliminaries: Key concepts and relations</A>
<UL>
-<LI><A NAME="tex2html24"
+<LI><A NAME="tex2html23"
HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
-<LI><A NAME="tex2html25"
+<LI><A NAME="tex2html24"
HREF="node3.html#SECTION00320000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Class and object hierarchies</A>
<UL>
-<LI><A NAME="tex2html26"
+<LI><A NAME="tex2html25"
HREF="node3.html#SECTION00321000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
-<LI><A NAME="tex2html27"
+<LI><A NAME="tex2html26"
HREF="node3.html#SECTION00322000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
<UL>
-<LI><A NAME="tex2html28"
+<LI><A NAME="tex2html27"
HREF="node3.html#SECTION00322100000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
-<LI><A NAME="tex2html29"
+<LI><A NAME="tex2html28"
HREF="node3.html#SECTION00322200000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
</UL>
-<LI><A NAME="tex2html30"
+<LI><A NAME="tex2html29"
HREF="node3.html#SECTION00323000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
</UL>
</UL>
<BR>
-<LI><A NAME="tex2html31"
+<LI><A NAME="tex2html30"
HREF="node4.html"><SPAN CLASS="arabic">3</SPAN>. Basic configuration</A>
<UL>
-<LI><A NAME="tex2html32"
+<LI><A NAME="tex2html31"
HREF="node4.html#SECTION00410000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> The configuration files</A>
-<LI><A NAME="tex2html33"
+<LI><A NAME="tex2html32"
HREF="node4.html#SECTION00420000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> A walk through <SPAN CLASS="textit">cfg_ion.lua</SPAN></A>
-<LI><A NAME="tex2html34"
+<LI><A NAME="tex2html33"
HREF="node4.html#SECTION00430000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Keys and rodents</A>
<UL>
-<LI><A NAME="tex2html35"
+<LI><A NAME="tex2html34"
HREF="node4.html#SECTION00431000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binding handlers and special variables</A>
-<LI><A NAME="tex2html36"
+<LI><A NAME="tex2html35"
HREF="node4.html#SECTION00432000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Guards</A>
-<LI><A NAME="tex2html37"
+<LI><A NAME="tex2html36"
HREF="node4.html#SECTION00433000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining the bindings</A>
-<LI><A NAME="tex2html38"
+<LI><A NAME="tex2html37"
HREF="node4.html#SECTION00434000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Examples</A>
-<LI><A NAME="tex2html39"
+<LI><A NAME="tex2html38"
HREF="node4.html#SECTION00435000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Key specifications</A>
-<LI><A NAME="tex2html40"
+<LI><A NAME="tex2html39"
HREF="node4.html#SECTION00436000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Button specifications</A>
-<LI><A NAME="tex2html41"
+<LI><A NAME="tex2html40"
HREF="node4.html#SECTION00437000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> A further note on the default binding configuration</A>
</UL>
-<LI><A NAME="tex2html42"
+<LI><A NAME="tex2html41"
HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
<UL>
-<LI><A NAME="tex2html43"
+<LI><A NAME="tex2html42"
HREF="node4.html#SECTION00441000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Defining menus</A>
-<LI><A NAME="tex2html44"
+<LI><A NAME="tex2html43"
HREF="node4.html#SECTION00442000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Special menus</A>
-<LI><A NAME="tex2html45"
+<LI><A NAME="tex2html44"
HREF="node4.html#SECTION00443000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining context menus</A>
-<LI><A NAME="tex2html46"
+<LI><A NAME="tex2html45"
HREF="node4.html#SECTION00444000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> Displaying menus</A>
</UL>
-<LI><A NAME="tex2html47"
+<LI><A NAME="tex2html46"
HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
<UL>
-<LI><A NAME="tex2html48"
+<LI><A NAME="tex2html47"
HREF="node4.html#SECTION00451000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Sizehint winprops</A>
-<LI><A NAME="tex2html49"
+<LI><A NAME="tex2html48"
HREF="node4.html#SECTION00452000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Classes, roles and instances</A>
-<LI><A NAME="tex2html50"
+<LI><A NAME="tex2html49"
HREF="node4.html#SECTION00453000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Finding window identification</A>
-<LI><A NAME="tex2html51"
+<LI><A NAME="tex2html50"
HREF="node4.html#SECTION00454000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Some common examples</A>
<UL>
-<LI><A NAME="tex2html52"
+<LI><A NAME="tex2html51"
HREF="node4.html#SECTION00454100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Acrobat Reader</A>
+<LI><A NAME="tex2html52"
+ HREF="node4.html#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Forcing newly created windows in named frames</A>
+</UL>
+</UL>
<LI><A NAME="tex2html53"
- HREF="node4.html#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
+ HREF="node4.html#SECTION00460000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> The statusbar</A>
+<UL>
<LI><A NAME="tex2html54"
- HREF="node4.html#SECTION00454300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+ HREF="node4.html#SECTION00461000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> The template</A>
+<LI><A NAME="tex2html55"
+ HREF="node4.html#SECTION00462000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> The systray</A>
+<LI><A NAME="tex2html56"
+ HREF="node4.html#SECTION00463000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Monitors</A>
+<UL>
+<LI><A NAME="tex2html57"
+ HREF="node4.html#SECTION00463100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Date</A>
+<LI><A NAME="tex2html58"
+ HREF="node4.html#SECTION00463200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Load</A>
+<LI><A NAME="tex2html59"
+ HREF="node4.html#SECTION00463300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Mail</A>
</UL>
</UL>
</UL>
<BR>
-<LI><A NAME="tex2html55"
+<LI><A NAME="tex2html60"
HREF="node5.html"><SPAN CLASS="arabic">4</SPAN>. Graphical styles</A>
<UL>
-<LI><A NAME="tex2html56"
+<LI><A NAME="tex2html61"
HREF="node5.html#SECTION00510000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Drawing engines, style specifications and sub-styles</A>
<UL>
-<LI><A NAME="tex2html57"
+<LI><A NAME="tex2html62"
HREF="node5.html#SECTION00511000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Known styles and substyles</A>
<UL>
-<LI><A NAME="tex2html58"
+<LI><A NAME="tex2html63"
HREF="node5.html#SECTION00511100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frames</A>
-<LI><A NAME="tex2html59"
+<LI><A NAME="tex2html64"
HREF="node5.html#SECTION00511200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tabs and menu entries</A>
-<LI><A NAME="tex2html60"
+<LI><A NAME="tex2html65"
HREF="node5.html#SECTION00511300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> The rest</A>
</UL>
</UL>
-<LI><A NAME="tex2html61"
+<LI><A NAME="tex2html66"
HREF="node5.html#SECTION00520000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining styles for the default drawing engine</A>
<UL>
-<LI><A NAME="tex2html62"
+<LI><A NAME="tex2html67"
HREF="node5.html#SECTION00521000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> The structure of the configuration files</A>
-<LI><A NAME="tex2html63"
+<LI><A NAME="tex2html68"
HREF="node5.html#SECTION00522000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining the styles</A>
<UL>
-<LI><A NAME="tex2html64"
+<LI><A NAME="tex2html69"
HREF="node5.html#SECTION00522100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Colours</A>
-<LI><A NAME="tex2html65"
+<LI><A NAME="tex2html70"
HREF="node5.html#SECTION00522200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Borders and widths</A>
-<LI><A NAME="tex2html66"
+<LI><A NAME="tex2html71"
HREF="node5.html#SECTION00522300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Text</A>
-<LI><A NAME="tex2html67"
+<LI><A NAME="tex2html72"
HREF="node5.html#SECTION00522400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
-<LI><A NAME="tex2html68"
+<LI><A NAME="tex2html73"
HREF="node5.html#SECTION00522500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Substyles</A>
</UL>
-<LI><A NAME="tex2html69"
+<LI><A NAME="tex2html74"
HREF="node5.html#SECTION00523000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> An example</A>
</UL>
-<LI><A NAME="tex2html70"
+<LI><A NAME="tex2html75"
HREF="node5.html#SECTION00530000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
<UL>
-<LI><A NAME="tex2html71"
- HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
-<LI><A NAME="tex2html72"
- HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+<LI><A NAME="tex2html76"
+ HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frame user attributes</A>
+<LI><A NAME="tex2html77"
+ HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style `<TT>frame</TT>'</A>
+<LI><A NAME="tex2html78"
+ HREF="node5.html#SECTION00533000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Extra fields for style `<TT>dock</TT>'</A>
</UL>
</UL>
<BR>
-<LI><A NAME="tex2html73"
+<LI><A NAME="tex2html79"
HREF="node6.html"><SPAN CLASS="arabic">5</SPAN>. Scripting</A>
<UL>
-<LI><A NAME="tex2html74"
+<LI><A NAME="tex2html80"
HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
-<LI><A NAME="tex2html75"
+<LI><A NAME="tex2html81"
HREF="node6.html#SECTION00620000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Referring to regions</A>
<UL>
-<LI><A NAME="tex2html76"
+<LI><A NAME="tex2html82"
HREF="node6.html#SECTION00621000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Direct object references</A>
-<LI><A NAME="tex2html77"
+<LI><A NAME="tex2html83"
HREF="node6.html#SECTION00622000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Name-based lookups</A>
</UL>
-<LI><A NAME="tex2html78"
+<LI><A NAME="tex2html84"
HREF="node6.html#SECTION00630000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Alternative winprop selection criteria</A>
-<LI><A NAME="tex2html79"
+<LI><A NAME="tex2html85"
HREF="node6.html#SECTION00640000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors</A>
</UL>
<BR>
-<LI><A NAME="tex2html80"
+<LI><A NAME="tex2html86"
HREF="node7.html"><SPAN CLASS="arabic">6</SPAN>. Function reference</A>
<UL>
-<LI><A NAME="tex2html81"
+<LI><A NAME="tex2html87"
HREF="node7.html#SECTION00710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Functions defined in <SPAN CLASS="textit">ioncore</SPAN></A>
<UL>
-<LI><A NAME="tex2html82"
- HREF="node7.html#SECTION00711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
-<LI><A NAME="tex2html83"
- HREF="node7.html#SECTION00712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
-<LI><A NAME="tex2html84"
- HREF="node7.html#SECTION00713000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
-<LI><A NAME="tex2html85"
- HREF="node7.html#SECTION00714000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
-<LI><A NAME="tex2html86"
- HREF="node7.html#SECTION00715000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
-<LI><A NAME="tex2html87"
- HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
<LI><A NAME="tex2html88"
- HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+ HREF="node7.html#SECTION00711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
<LI><A NAME="tex2html89"
- HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+ HREF="node7.html#SECTION00712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
<LI><A NAME="tex2html90"
- HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+ HREF="node7.html#SECTION00713000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
<LI><A NAME="tex2html91"
- HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+ HREF="node7.html#SECTION00714000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
<LI><A NAME="tex2html92"
- HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+ HREF="node7.html#SECTION00715000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
<LI><A NAME="tex2html93"
- HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+ HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WHook functions</A>
<LI><A NAME="tex2html94"
- HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+ HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WInfoWin functions</A>
<LI><A NAME="tex2html95"
- HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+ HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMPlex functions</A>
<LI><A NAME="tex2html96"
- HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+ HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WMoveresMode functions</A>
<LI><A NAME="tex2html97"
- HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
-</UL>
+ HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRegion functions</A>
<LI><A NAME="tex2html98"
+ HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WRootWin functions</A>
+<LI><A NAME="tex2html99"
+ HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WScreen functions</A>
+<LI><A NAME="tex2html100"
+ HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> WTimer functions</A>
+<LI><A NAME="tex2html101"
+ HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> WWindow functions</A>
+<LI><A NAME="tex2html102"
+ HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> global functions</A>
+<LI><A NAME="tex2html103"
+ HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> gr functions</A>
+<LI><A NAME="tex2html104"
+ HREF="node7.html#SECTION007117000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">17</SPAN> string functions</A>
+<LI><A NAME="tex2html105"
+ HREF="node7.html#SECTION007118000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">18</SPAN> table functions</A>
+</UL>
+<LI><A NAME="tex2html106"
HREF="node7.html#SECTION00720000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Functions defined in <SPAN CLASS="textit">mod_tiling</SPAN></A>
<UL>
-<LI><A NAME="tex2html99"
+<LI><A NAME="tex2html107"
HREF="node7.html#SECTION00721000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> WSplit functions</A>
-<LI><A NAME="tex2html100"
+<LI><A NAME="tex2html108"
HREF="node7.html#SECTION00722000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> WSplitInner functions</A>
-<LI><A NAME="tex2html101"
+<LI><A NAME="tex2html109"
HREF="node7.html#SECTION00723000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> WSplitRegion functions</A>
-<LI><A NAME="tex2html102"
+<LI><A NAME="tex2html110"
HREF="node7.html#SECTION00724000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> WSplitSplit functions</A>
-<LI><A NAME="tex2html103"
+<LI><A NAME="tex2html111"
HREF="node7.html#SECTION00725000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> WTiling functions</A>
</UL>
-<LI><A NAME="tex2html104"
+<LI><A NAME="tex2html112"
HREF="node7.html#SECTION00730000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Functions defined in <SPAN CLASS="textit">mod_query</SPAN></A>
<UL>
-<LI><A NAME="tex2html105"
+<LI><A NAME="tex2html113"
HREF="node7.html#SECTION00731000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> WComplProxy functions</A>
-<LI><A NAME="tex2html106"
+<LI><A NAME="tex2html114"
HREF="node7.html#SECTION00732000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> WEdln functions</A>
-<LI><A NAME="tex2html107"
+<LI><A NAME="tex2html115"
HREF="node7.html#SECTION00733000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> WInput functions</A>
</UL>
-<LI><A NAME="tex2html108"
+<LI><A NAME="tex2html116"
HREF="node7.html#SECTION00740000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> Functions defined in <SPAN CLASS="textit">mod_menu</SPAN></A>
<UL>
-<LI><A NAME="tex2html109"
+<LI><A NAME="tex2html117"
HREF="node7.html#SECTION00741000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> WMenu functions</A>
</UL>
-<LI><A NAME="tex2html110"
+<LI><A NAME="tex2html118"
HREF="node7.html#SECTION00750000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Functions defined in <SPAN CLASS="textit">mod_dock</SPAN></A>
<UL>
-<LI><A NAME="tex2html111"
+<LI><A NAME="tex2html119"
HREF="node7.html#SECTION00751000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> WDock functions</A>
</UL>
-<LI><A NAME="tex2html112"
+<LI><A NAME="tex2html120"
HREF="node7.html#SECTION00760000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Functions defined in <SPAN CLASS="textit">mod_sp</SPAN></A>
-<LI><A NAME="tex2html113"
+<LI><A NAME="tex2html121"
HREF="node7.html#SECTION00770000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN CLASS="textit">mod_statusbar</SPAN></A>
<UL>
-<LI><A NAME="tex2html114"
+<LI><A NAME="tex2html122"
HREF="node7.html#SECTION00771000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> WStatusBar functions</A>
</UL>
-<LI><A NAME="tex2html115"
+<LI><A NAME="tex2html123"
HREF="node7.html#SECTION00780000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Functions defined in <SPAN CLASS="textit">de</SPAN></A>
-<LI><A NAME="tex2html116"
+<LI><A NAME="tex2html124"
HREF="node7.html#SECTION00790000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Hooks</A>
+<LI><A NAME="tex2html125"
+ HREF="node7.html#SECTION007100000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> Miscellaneous</A>
+<UL>
+<LI><A NAME="tex2html126"
+ HREF="node7.html#SECTION007101000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN>.<SPAN CLASS="arabic">1</SPAN> Size policies</A>
+</UL>
</UL>
<BR>
-<LI><A NAME="tex2html117"
+<LI><A NAME="tex2html127"
HREF="node8.html">A. The GNU General Public License</A>
<UL>
-<LI><A NAME="tex2html118"
+<LI><A NAME="tex2html128"
HREF="node8.html#SECTION00810000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
</UL>
<BR>
-<LI><A NAME="tex2html119"
+<LI><A NAME="tex2html129"
HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
-<LI><A NAME="tex2html120"
+<LI><A NAME="tex2html130"
HREF="node10.html">List of functions</A>
-<LI><A NAME="tex2html121"
+<LI><A NAME="tex2html131"
HREF="node11.html">Index</A>
-<LI><A NAME="tex2html122"
- HREF="node12.html">About this document ...</A>
+<LI><A NAME="tex2html132"
+ HREF="node12.html">Bibliography</A>
+<LI><A NAME="tex2html133"
+ HREF="node13.html">About this document ...</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WHook.add/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.x_get_window_property/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.get_hook/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.tabnum.clear/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:mod_query.query_exec/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.insstr/;
+$key = q/fn:WClientWin.quote_next/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WClientWin.quote_next/;
+$key = q/fn:WEdln.insstr/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/sec:sizepolicies/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTimer.set/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.goto_activity/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WTiling.farthest/;
+$key = q/fn:ioncore.submap_enter/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.finish/;
+$key = q/fn:WTiling.farthest/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.mark/;
+$key = q/fn:WEdln.finish/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WEdln.mark/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WMPlex.switch_prev/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.is_mapped/;
+$key = q/fn:ioncore.goto_prev_screen/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.goto_prev_screen/;
+$key = q/fn:WRegion.is_mapped/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.transpose_words/;
+$key = q/sec:ioncoreref/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/sec:ioncoreref/;
+$key = q/fn:WEdln.transpose_words/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:mod_statusbar.launch_statusd/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.getbindings/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WTimer.reset/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fig:borders/;
$ref_files{$key} = "$dir".q|node5.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WStatusBar.is_systray_extl/;
-$ref_files{$key} = "$dir".q|node7.html|;
+$key = q/sec:statusbar/;
+$ref_files{$key} = "$dir".q|node4.html|;
$noresave{$key} = "$nosave";
$key = q/fn:WMenu.select_nth/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.create_timer/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WTiling.managed_i/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node3.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplitSplit.tl/;
+$key = q/fn:ioncore.defctxmenu/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.defctxmenu/;
+$key = q/fn:WSplitSplit.tl/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.set_name_exact/;
+$key = q/fn:WMPlex.switch_nth/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WMPlex.switch_nth/;
+$key = q/fn:WRegion.set_name_exact/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WFrame.set_grattr/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WEdln.forward/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.tabnum.show/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/region_do_warp_alt/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:mod_statusbar.inform/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.tagged_i/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/cite_scripts/;
+$ref_files{$key} = "$dir".q|node12.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.clientwin_i/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.unsqueeze/;
+$key = q/fn:WGroup.bottom/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WGroup.bottom/;
+$key = q/fn:ioncore.unsqueeze/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node6.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.groupleader_of/;
+$key = q/fn:ioncore.get_savefile/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.get_savefile/;
+$key = q/fn:WRegion.groupleader_of/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:mod_query.history_push/;
+$key = q/fn:ioncore.lookup_clientwin/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.lookup_clientwin/;
+$key = q/fn:mod_query.history_push/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node4.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplit.parent/;
+$key = q/fn:ioncore.getctxmenu/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.getctxmenu/;
+$key = q/fn:WSplit.parent/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.defer/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WMenu.select_prev/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WHook.listed/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.refresh_stylelist/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:string.shell_safe/;
+$key = q/fn:mod_query.query_restart/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:mod_query.query_restart/;
+$key = q/fn:string.shell_safe/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.deflayout/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
$key = q/sec:classesrolesinstances/;
$ref_files{$key} = "$dir".q|node4.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.deflayout/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.tagged_attach/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/sec:miscref/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WClientWin.xid/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.match_winprop_dflt/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.get_paths/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node4.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WFrame.set_numbers/;
+$key = q/fn:mod_statusbar.update/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:mod_statusbar.create/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WGroup.attach/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplitSplit.flip/;
+$key = q/fn:WTiling.split_top/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WTiling.split_top/;
+$key = q/fn:WSplitSplit.flip/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.defwinprop/;
+$key = q/fn:ioncore.popen_bgread/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.popen_bgread/;
+$key = q/fn:ioncore.defwinprop/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WSplit.transpose/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WClientWin.kill/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplit.transpose/;
+$key = q/fn:ioncore.submap_wait/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WSplitSplit.dir/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:table.map/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplitSplit.dir/;
+$key = q/fn:WMPlex.set_stdisp/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WMPlex.set_stdisp/;
+$key = q/fn:WStatusBar.is_systray/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WInput.cancel/;
+$key = q/fn:WRegion.parent/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.parent/;
+$key = q/fn:WInput.cancel/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.match_winprop_name/;
-$ref_files{$key} = "$dir".q|node7.html|;
-$noresave{$key} = "$nosave";
-
$key = q/ioncore_sigchld_hook/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WHook.remove/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.request_selection/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/sec:grmisc/;
+$ref_files{$key} = "$dir".q|node5.html|;
+$noresave{$key} = "$nosave";
+
$key = q/chap:prelim/;
$ref_files{$key} = "$dir".q|node3.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/sec:statusd/;
+$ref_files{$key} = "$dir".q|node6.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WRegion.rqgeom/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WTimer.is_set/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WRegion.set_name/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/ioncore_submap_ungrab_hook/;
+$ref_files{$key} = "$dir".q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WGroup.attach_new/;
$ref_files{$key} = "$dir".q|node7.html|;
$noresave{$key} = "$nosave";
/* document-specific styles come next */
DIV.navigation { }
+DIV.flushleft { }
DIV.center { }
SPAN.sc { }
DIV.quote { }
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html19"
+<A NAME="tex2html18"
HREF="node1.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html13"
+<A NAME="tex2html12"
HREF="http://iki.fi/tuomov/ion/">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev_g.png">
-<A NAME="tex2html15"
+<A NAME="tex2html14"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html17"
+<A NAME="tex2html16"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html20"
+<B> Next:</B> <A NAME="tex2html19"
HREF="node1.html">Contents</A>
-<B> Up:</B> <A NAME="tex2html14"
+<B> Up:</B> <A NAME="tex2html13"
HREF="http://iki.fi/tuomov/ion/">Ion homepage</A>
- <B> <A NAME="tex2html16"
+ <B> <A NAME="tex2html15"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html18"
+ <B> <A NAME="tex2html17"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
<P ALIGN="CENTER"><STRONG>Tuomo Valkonen</STRONG></P>
<P ALIGN="CENTER"><I>tuomov at iki.fi</I></P>
-<P ALIGN="CENTER"><STRONG>2007-03-18</STRONG></P>
+<P ALIGN="CENTER"><STRONG>2007-05-06</STRONG></P>
</DIV>
<P>
Configuring and extending Ion3 with Lua
<BR>
-Copyright © 2003-2005 Tuomo Valkonen.
+Copyright © 2003-2007 Tuomo Valkonen.
<P>
This document is free; you can redistribute it and/or modify
This document is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-chapter entitled ''GNU General Public License'' for more details.
+chapter entitled ``GNU General Public License'' for more details.
<P>
<BR><HR>
<A NAME="CHILD_LINKS"></A>
<UL CLASS="ChildLinks">
-<LI><A NAME="tex2html21"
+<LI><A NAME="tex2html20"
HREF="node1.html">Contents</A>
-<LI><A NAME="tex2html22"
+<LI><A NAME="tex2html21"
HREF="node2.html"><SPAN CLASS="arabic">1</SPAN>. Introduction</A>
-<LI><A NAME="tex2html23"
+<LI><A NAME="tex2html22"
HREF="node3.html"><SPAN CLASS="arabic">2</SPAN>. Preliminaries: Key concepts and relations</A>
<UL>
-<LI><A NAME="tex2html24"
+<LI><A NAME="tex2html23"
HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
-<LI><A NAME="tex2html25"
+<LI><A NAME="tex2html24"
HREF="node3.html#SECTION00320000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Class and object hierarchies</A>
<UL>
-<LI><A NAME="tex2html26"
+<LI><A NAME="tex2html25"
HREF="node3.html#SECTION00321000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
-<LI><A NAME="tex2html27"
+<LI><A NAME="tex2html26"
HREF="node3.html#SECTION00322000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
<UL>
-<LI><A NAME="tex2html28"
+<LI><A NAME="tex2html27"
HREF="node3.html#SECTION00322100000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
-<LI><A NAME="tex2html29"
+<LI><A NAME="tex2html28"
HREF="node3.html#SECTION00322200000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
</UL>
-<LI><A NAME="tex2html30"
+<LI><A NAME="tex2html29"
HREF="node3.html#SECTION00323000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
</UL>
</UL>
<BR>
-<LI><A NAME="tex2html31"
+<LI><A NAME="tex2html30"
HREF="node4.html"><SPAN CLASS="arabic">3</SPAN>. Basic configuration</A>
<UL>
-<LI><A NAME="tex2html32"
+<LI><A NAME="tex2html31"
HREF="node4.html#SECTION00410000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> The configuration files</A>
-<LI><A NAME="tex2html33"
+<LI><A NAME="tex2html32"
HREF="node4.html#SECTION00420000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> A walk through <SPAN CLASS="textit">cfg_ion.lua</SPAN></A>
-<LI><A NAME="tex2html34"
+<LI><A NAME="tex2html33"
HREF="node4.html#SECTION00430000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Keys and rodents</A>
<UL>
-<LI><A NAME="tex2html35"
+<LI><A NAME="tex2html34"
HREF="node4.html#SECTION00431000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binding handlers and special variables</A>
-<LI><A NAME="tex2html36"
+<LI><A NAME="tex2html35"
HREF="node4.html#SECTION00432000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Guards</A>
-<LI><A NAME="tex2html37"
+<LI><A NAME="tex2html36"
HREF="node4.html#SECTION00433000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining the bindings</A>
-<LI><A NAME="tex2html38"
+<LI><A NAME="tex2html37"
HREF="node4.html#SECTION00434000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Examples</A>
-<LI><A NAME="tex2html39"
+<LI><A NAME="tex2html38"
HREF="node4.html#SECTION00435000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Key specifications</A>
-<LI><A NAME="tex2html40"
+<LI><A NAME="tex2html39"
HREF="node4.html#SECTION00436000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Button specifications</A>
-<LI><A NAME="tex2html41"
+<LI><A NAME="tex2html40"
HREF="node4.html#SECTION00437000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> A further note on the default binding configuration</A>
</UL>
-<LI><A NAME="tex2html42"
+<LI><A NAME="tex2html41"
HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
<UL>
-<LI><A NAME="tex2html43"
+<LI><A NAME="tex2html42"
HREF="node4.html#SECTION00441000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Defining menus</A>
-<LI><A NAME="tex2html44"
+<LI><A NAME="tex2html43"
HREF="node4.html#SECTION00442000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Special menus</A>
-<LI><A NAME="tex2html45"
+<LI><A NAME="tex2html44"
HREF="node4.html#SECTION00443000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining context menus</A>
-<LI><A NAME="tex2html46"
+<LI><A NAME="tex2html45"
HREF="node4.html#SECTION00444000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> Displaying menus</A>
</UL>
-<LI><A NAME="tex2html47"
+<LI><A NAME="tex2html46"
HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
<UL>
-<LI><A NAME="tex2html48"
+<LI><A NAME="tex2html47"
HREF="node4.html#SECTION00451000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Sizehint winprops</A>
-<LI><A NAME="tex2html49"
+<LI><A NAME="tex2html48"
HREF="node4.html#SECTION00452000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Classes, roles and instances</A>
-<LI><A NAME="tex2html50"
+<LI><A NAME="tex2html49"
HREF="node4.html#SECTION00453000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Finding window identification</A>
-<LI><A NAME="tex2html51"
+<LI><A NAME="tex2html50"
HREF="node4.html#SECTION00454000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Some common examples</A>
<UL>
-<LI><A NAME="tex2html52"
+<LI><A NAME="tex2html51"
HREF="node4.html#SECTION00454100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Acrobat Reader</A>
+<LI><A NAME="tex2html52"
+ HREF="node4.html#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Forcing newly created windows in named frames</A>
+</UL>
+</UL>
<LI><A NAME="tex2html53"
- HREF="node4.html#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
+ HREF="node4.html#SECTION00460000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> The statusbar</A>
+<UL>
<LI><A NAME="tex2html54"
- HREF="node4.html#SECTION00454300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+ HREF="node4.html#SECTION00461000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> The template</A>
+<LI><A NAME="tex2html55"
+ HREF="node4.html#SECTION00462000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> The systray</A>
+<LI><A NAME="tex2html56"
+ HREF="node4.html#SECTION00463000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Monitors</A>
+<UL>
+<LI><A NAME="tex2html57"
+ HREF="node4.html#SECTION00463100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Date</A>
+<LI><A NAME="tex2html58"
+ HREF="node4.html#SECTION00463200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Load</A>
+<LI><A NAME="tex2html59"
+ HREF="node4.html#SECTION00463300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Mail</A>
</UL>
</UL>
</UL>
<BR>
-<LI><A NAME="tex2html55"
+<LI><A NAME="tex2html60"
HREF="node5.html"><SPAN CLASS="arabic">4</SPAN>. Graphical styles</A>
<UL>
-<LI><A NAME="tex2html56"
+<LI><A NAME="tex2html61"
HREF="node5.html#SECTION00510000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Drawing engines, style specifications and sub-styles</A>
<UL>
-<LI><A NAME="tex2html57"
+<LI><A NAME="tex2html62"
HREF="node5.html#SECTION00511000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Known styles and substyles</A>
<UL>
-<LI><A NAME="tex2html58"
+<LI><A NAME="tex2html63"
HREF="node5.html#SECTION00511100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frames</A>
-<LI><A NAME="tex2html59"
+<LI><A NAME="tex2html64"
HREF="node5.html#SECTION00511200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tabs and menu entries</A>
-<LI><A NAME="tex2html60"
+<LI><A NAME="tex2html65"
HREF="node5.html#SECTION00511300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> The rest</A>
</UL>
</UL>
-<LI><A NAME="tex2html61"
+<LI><A NAME="tex2html66"
HREF="node5.html#SECTION00520000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining styles for the default drawing engine</A>
<UL>
-<LI><A NAME="tex2html62"
+<LI><A NAME="tex2html67"
HREF="node5.html#SECTION00521000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> The structure of the configuration files</A>
-<LI><A NAME="tex2html63"
+<LI><A NAME="tex2html68"
HREF="node5.html#SECTION00522000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining the styles</A>
<UL>
-<LI><A NAME="tex2html64"
+<LI><A NAME="tex2html69"
HREF="node5.html#SECTION00522100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Colours</A>
-<LI><A NAME="tex2html65"
+<LI><A NAME="tex2html70"
HREF="node5.html#SECTION00522200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Borders and widths</A>
-<LI><A NAME="tex2html66"
+<LI><A NAME="tex2html71"
HREF="node5.html#SECTION00522300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Text</A>
-<LI><A NAME="tex2html67"
+<LI><A NAME="tex2html72"
HREF="node5.html#SECTION00522400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
-<LI><A NAME="tex2html68"
+<LI><A NAME="tex2html73"
HREF="node5.html#SECTION00522500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Substyles</A>
</UL>
-<LI><A NAME="tex2html69"
+<LI><A NAME="tex2html74"
HREF="node5.html#SECTION00523000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> An example</A>
</UL>
-<LI><A NAME="tex2html70"
+<LI><A NAME="tex2html75"
HREF="node5.html#SECTION00530000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
<UL>
-<LI><A NAME="tex2html71"
- HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
-<LI><A NAME="tex2html72"
- HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+<LI><A NAME="tex2html76"
+ HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frame user attributes</A>
+<LI><A NAME="tex2html77"
+ HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style `<TT>frame</TT>'</A>
+<LI><A NAME="tex2html78"
+ HREF="node5.html#SECTION00533000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Extra fields for style `<TT>dock</TT>'</A>
</UL>
</UL>
<BR>
-<LI><A NAME="tex2html73"
+<LI><A NAME="tex2html79"
HREF="node6.html"><SPAN CLASS="arabic">5</SPAN>. Scripting</A>
<UL>
-<LI><A NAME="tex2html74"
+<LI><A NAME="tex2html80"
HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
-<LI><A NAME="tex2html75"
+<LI><A NAME="tex2html81"
HREF="node6.html#SECTION00620000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Referring to regions</A>
<UL>
-<LI><A NAME="tex2html76"
+<LI><A NAME="tex2html82"
HREF="node6.html#SECTION00621000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Direct object references</A>
-<LI><A NAME="tex2html77"
+<LI><A NAME="tex2html83"
HREF="node6.html#SECTION00622000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Name-based lookups</A>
</UL>
-<LI><A NAME="tex2html78"
+<LI><A NAME="tex2html84"
HREF="node6.html#SECTION00630000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Alternative winprop selection criteria</A>
-<LI><A NAME="tex2html79"
+<LI><A NAME="tex2html85"
HREF="node6.html#SECTION00640000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors</A>
</UL>
<BR>
-<LI><A NAME="tex2html80"
+<LI><A NAME="tex2html86"
HREF="node7.html"><SPAN CLASS="arabic">6</SPAN>. Function reference</A>
<UL>
-<LI><A NAME="tex2html81"
+<LI><A NAME="tex2html87"
HREF="node7.html#SECTION00710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Functions defined in <SPAN CLASS="textit">ioncore</SPAN></A>
<UL>
-<LI><A NAME="tex2html82"
- HREF="node7.html#SECTION00711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
-<LI><A NAME="tex2html83"
- HREF="node7.html#SECTION00712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
-<LI><A NAME="tex2html84"
- HREF="node7.html#SECTION00713000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
-<LI><A NAME="tex2html85"
- HREF="node7.html#SECTION00714000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
-<LI><A NAME="tex2html86"
- HREF="node7.html#SECTION00715000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
-<LI><A NAME="tex2html87"
- HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
<LI><A NAME="tex2html88"
- HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+ HREF="node7.html#SECTION00711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
<LI><A NAME="tex2html89"
- HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+ HREF="node7.html#SECTION00712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
<LI><A NAME="tex2html90"
- HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+ HREF="node7.html#SECTION00713000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
<LI><A NAME="tex2html91"
- HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+ HREF="node7.html#SECTION00714000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
<LI><A NAME="tex2html92"
- HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+ HREF="node7.html#SECTION00715000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
<LI><A NAME="tex2html93"
- HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+ HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WHook functions</A>
<LI><A NAME="tex2html94"
- HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+ HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WInfoWin functions</A>
<LI><A NAME="tex2html95"
- HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+ HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMPlex functions</A>
<LI><A NAME="tex2html96"
- HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+ HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WMoveresMode functions</A>
<LI><A NAME="tex2html97"
- HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
-</UL>
+ HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRegion functions</A>
<LI><A NAME="tex2html98"
+ HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WRootWin functions</A>
+<LI><A NAME="tex2html99"
+ HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WScreen functions</A>
+<LI><A NAME="tex2html100"
+ HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> WTimer functions</A>
+<LI><A NAME="tex2html101"
+ HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> WWindow functions</A>
+<LI><A NAME="tex2html102"
+ HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> global functions</A>
+<LI><A NAME="tex2html103"
+ HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> gr functions</A>
+<LI><A NAME="tex2html104"
+ HREF="node7.html#SECTION007117000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">17</SPAN> string functions</A>
+<LI><A NAME="tex2html105"
+ HREF="node7.html#SECTION007118000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">18</SPAN> table functions</A>
+</UL>
+<LI><A NAME="tex2html106"
HREF="node7.html#SECTION00720000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Functions defined in <SPAN CLASS="textit">mod_tiling</SPAN></A>
<UL>
-<LI><A NAME="tex2html99"
+<LI><A NAME="tex2html107"
HREF="node7.html#SECTION00721000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> WSplit functions</A>
-<LI><A NAME="tex2html100"
+<LI><A NAME="tex2html108"
HREF="node7.html#SECTION00722000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> WSplitInner functions</A>
-<LI><A NAME="tex2html101"
+<LI><A NAME="tex2html109"
HREF="node7.html#SECTION00723000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> WSplitRegion functions</A>
-<LI><A NAME="tex2html102"
+<LI><A NAME="tex2html110"
HREF="node7.html#SECTION00724000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> WSplitSplit functions</A>
-<LI><A NAME="tex2html103"
+<LI><A NAME="tex2html111"
HREF="node7.html#SECTION00725000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> WTiling functions</A>
</UL>
-<LI><A NAME="tex2html104"
+<LI><A NAME="tex2html112"
HREF="node7.html#SECTION00730000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Functions defined in <SPAN CLASS="textit">mod_query</SPAN></A>
<UL>
-<LI><A NAME="tex2html105"
+<LI><A NAME="tex2html113"
HREF="node7.html#SECTION00731000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> WComplProxy functions</A>
-<LI><A NAME="tex2html106"
+<LI><A NAME="tex2html114"
HREF="node7.html#SECTION00732000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> WEdln functions</A>
-<LI><A NAME="tex2html107"
+<LI><A NAME="tex2html115"
HREF="node7.html#SECTION00733000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> WInput functions</A>
</UL>
-<LI><A NAME="tex2html108"
+<LI><A NAME="tex2html116"
HREF="node7.html#SECTION00740000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> Functions defined in <SPAN CLASS="textit">mod_menu</SPAN></A>
<UL>
-<LI><A NAME="tex2html109"
+<LI><A NAME="tex2html117"
HREF="node7.html#SECTION00741000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> WMenu functions</A>
</UL>
-<LI><A NAME="tex2html110"
+<LI><A NAME="tex2html118"
HREF="node7.html#SECTION00750000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Functions defined in <SPAN CLASS="textit">mod_dock</SPAN></A>
<UL>
-<LI><A NAME="tex2html111"
+<LI><A NAME="tex2html119"
HREF="node7.html#SECTION00751000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> WDock functions</A>
</UL>
-<LI><A NAME="tex2html112"
+<LI><A NAME="tex2html120"
HREF="node7.html#SECTION00760000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Functions defined in <SPAN CLASS="textit">mod_sp</SPAN></A>
-<LI><A NAME="tex2html113"
+<LI><A NAME="tex2html121"
HREF="node7.html#SECTION00770000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN CLASS="textit">mod_statusbar</SPAN></A>
<UL>
-<LI><A NAME="tex2html114"
+<LI><A NAME="tex2html122"
HREF="node7.html#SECTION00771000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> WStatusBar functions</A>
</UL>
-<LI><A NAME="tex2html115"
+<LI><A NAME="tex2html123"
HREF="node7.html#SECTION00780000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Functions defined in <SPAN CLASS="textit">de</SPAN></A>
-<LI><A NAME="tex2html116"
+<LI><A NAME="tex2html124"
HREF="node7.html#SECTION00790000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Hooks</A>
+<LI><A NAME="tex2html125"
+ HREF="node7.html#SECTION007100000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> Miscellaneous</A>
+<UL>
+<LI><A NAME="tex2html126"
+ HREF="node7.html#SECTION007101000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN>.<SPAN CLASS="arabic">1</SPAN> Size policies</A>
+</UL>
</UL>
<BR>
-<LI><A NAME="tex2html117"
+<LI><A NAME="tex2html127"
HREF="node8.html">A. The GNU General Public License</A>
<UL>
-<LI><A NAME="tex2html118"
+<LI><A NAME="tex2html128"
HREF="node8.html#SECTION00810000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
</UL>
<BR>
-<LI><A NAME="tex2html119"
+<LI><A NAME="tex2html129"
HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
-<LI><A NAME="tex2html120"
+<LI><A NAME="tex2html130"
HREF="node10.html">List of functions</A>
-<LI><A NAME="tex2html121"
+<LI><A NAME="tex2html131"
HREF="node11.html">Index</A>
-<LI><A NAME="tex2html122"
- HREF="node12.html">About this document ...</A>
+<LI><A NAME="tex2html132"
+ HREF="node12.html">Bibliography</A>
+<LI><A NAME="tex2html133"
+ HREF="node13.html">About this document ...</A>
</UL>
<!--End of Table of Child-Links-->
<BR><HR>
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WHook.add/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.x_get_window_property/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.get_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.tabnum.clear/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:mod_query.query_exec/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.insstr/;
+$key = q/fn:WClientWin.quote_next/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WClientWin.quote_next/;
+$key = q/fn:WEdln.insstr/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/sec:sizepolicies/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTimer.set/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.goto_activity/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WTiling.farthest/;
+$key = q/fn:ioncore.submap_enter/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.finish/;
+$key = q/fn:WTiling.farthest/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.mark/;
+$key = q/fn:WEdln.finish/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WEdln.mark/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WMPlex.switch_prev/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.is_mapped/;
+$key = q/fn:ioncore.goto_prev_screen/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.goto_prev_screen/;
+$key = q/fn:WRegion.is_mapped/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.transpose_words/;
+$key = q/sec:ioncoreref/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/sec:ioncoreref/;
+$key = q/fn:WEdln.transpose_words/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:mod_statusbar.launch_statusd/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.getbindings/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WTimer.reset/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fig:borders/;
$external_labels{$key} = "$URL/" . q|node5.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WStatusBar.is_systray_extl/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
+$key = q/sec:statusbar/;
+$external_labels{$key} = "$URL/" . q|node4.html|;
$noresave{$key} = "$nosave";
$key = q/fn:WMenu.select_nth/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.create_timer/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WTiling.managed_i/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node3.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplitSplit.tl/;
+$key = q/fn:ioncore.defctxmenu/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.defctxmenu/;
+$key = q/fn:WSplitSplit.tl/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.set_name_exact/;
+$key = q/fn:WMPlex.switch_nth/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WMPlex.switch_nth/;
+$key = q/fn:WRegion.set_name_exact/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WFrame.set_grattr/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WEdln.forward/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.tabnum.show/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/region_do_warp_alt/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:mod_statusbar.inform/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.tagged_i/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/cite_scripts/;
+$external_labels{$key} = "$URL/" . q|node12.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.clientwin_i/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.unsqueeze/;
+$key = q/fn:WGroup.bottom/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WGroup.bottom/;
+$key = q/fn:ioncore.unsqueeze/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node6.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.groupleader_of/;
+$key = q/fn:ioncore.get_savefile/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.get_savefile/;
+$key = q/fn:WRegion.groupleader_of/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:mod_query.history_push/;
+$key = q/fn:ioncore.lookup_clientwin/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.lookup_clientwin/;
+$key = q/fn:mod_query.history_push/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node4.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplit.parent/;
+$key = q/fn:ioncore.getctxmenu/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.getctxmenu/;
+$key = q/fn:WSplit.parent/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.defer/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WMenu.select_prev/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WHook.listed/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.refresh_stylelist/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:string.shell_safe/;
+$key = q/fn:mod_query.query_restart/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:mod_query.query_restart/;
+$key = q/fn:string.shell_safe/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.deflayout/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
$key = q/sec:classesrolesinstances/;
$external_labels{$key} = "$URL/" . q|node4.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.deflayout/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.tagged_attach/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/sec:miscref/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WClientWin.xid/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.match_winprop_dflt/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.get_paths/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node4.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WFrame.set_numbers/;
+$key = q/fn:mod_statusbar.update/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:mod_statusbar.create/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WGroup.attach/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplitSplit.flip/;
+$key = q/fn:WTiling.split_top/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WTiling.split_top/;
+$key = q/fn:WSplitSplit.flip/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.defwinprop/;
+$key = q/fn:ioncore.popen_bgread/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.popen_bgread/;
+$key = q/fn:ioncore.defwinprop/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WSplit.transpose/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WClientWin.kill/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplit.transpose/;
+$key = q/fn:ioncore.submap_wait/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WSplitSplit.dir/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:table.map/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplitSplit.dir/;
+$key = q/fn:WMPlex.set_stdisp/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WMPlex.set_stdisp/;
+$key = q/fn:WStatusBar.is_systray/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WInput.cancel/;
+$key = q/fn:WRegion.parent/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.parent/;
+$key = q/fn:WInput.cancel/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.match_winprop_name/;
-$external_labels{$key} = "$URL/" . q|node7.html|;
-$noresave{$key} = "$nosave";
-
$key = q/ioncore_sigchld_hook/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WHook.remove/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.request_selection/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/sec:grmisc/;
+$external_labels{$key} = "$URL/" . q|node5.html|;
+$noresave{$key} = "$nosave";
+
$key = q/chap:prelim/;
$external_labels{$key} = "$URL/" . q|node3.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/sec:statusd/;
+$external_labels{$key} = "$URL/" . q|node6.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WRegion.rqgeom/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/fn:WTimer.is_set/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WRegion.set_name/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
+$key = q/ioncore_submap_ungrab_hook/;
+$external_labels{$key} = "$URL/" . q|node7.html|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WGroup.attach_new/;
$external_labels{$key} = "$URL/" . q|node7.html|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.mx_nth/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:gr.select_engine/;
-$external_latex_labels{$key} = q|6.1.14|;
+$external_latex_labels{$key} = q|6.1.16|;
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WHook.add/;
+$external_latex_labels{$key} = q|6.1.6|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.x_get_window_property/;
$external_latex_labels{$key} = q|6.3.2|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.get_hook/;
+$external_latex_labels{$key} = q|6.1|;
+$noresave{$key} = "$nosave";
+
+$key = q/fn:ioncore.tabnum.clear/;
+$external_latex_labels{$key} = q|6.1|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:mod_query.query_exec/;
$external_latex_labels{$key} = q|6.3|;
$noresave{$key} = "$nosave";
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.insstr/;
-$external_latex_labels{$key} = q|6.3.2|;
-$noresave{$key} = "$nosave";
-
$key = q/fn:WClientWin.quote_next/;
$external_latex_labels{$key} = q|6.1.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:WEdln.insstr/;
+$external_latex_labels{$key} = q|6.3.2|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:mod_query.query_renameworkspace/;
$external_latex_labels{$key} = q|6.3|;
$noresave{$key} = "$nosave";
$external_latex_labels{$key} = q|6.1.2|;
$noresave{$key} = "$nosave";
+$key = q/sec:sizepolicies/;
+$external_latex_labels{$key} = q|6.10.1|;
+$noresave{$key} = "$nosave";
+
+$key = q/fn:WTimer.set/;
+$external_latex_labels{$key} = q|6.1.13|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.goto_activity/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
-$key = q/fn:WTiling.farthest/;
-$external_latex_labels{$key} = q|6.2.5|;
+$key = q/fn:ioncore.submap_enter/;
+$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.create_ws/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:WTiling.farthest/;
+$external_latex_labels{$key} = q|6.2.5|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WEdln.finish/;
$external_latex_labels{$key} = q|6.3.2|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.mark/;
+$key = q/fn:WEdln.bskip_word/;
$external_latex_labels{$key} = q|6.3.2|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.bskip_word/;
+$key = q/fn:WEdln.mark/;
$external_latex_labels{$key} = q|6.3.2|;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.switch_prev/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:WTiling.unsplit_at/;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.dec_index/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.current/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.is_mapped/;
-$external_latex_labels{$key} = q|6.1.9|;
-$noresave{$key} = "$nosave";
-
$key = q/fn:ioncore.goto_prev_screen/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
-$key = q/fn:WEdln.transpose_words/;
-$external_latex_labels{$key} = q|6.3.2|;
+$key = q/fn:WRegion.is_mapped/;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/sec:ioncoreref/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:WEdln.transpose_words/;
+$external_latex_labels{$key} = q|6.3.2|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:mod_statusbar.statusbars/;
$external_latex_labels{$key} = q|6.7|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WWindow.p_resize/;
-$external_latex_labels{$key} = q|6.1.12|;
+$external_latex_labels{$key} = q|6.1.14|;
$noresave{$key} = "$nosave";
$key = q/fn:WComplProxy.set_completions/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:mod_statusbar.launch_statusd/;
+$external_latex_labels{$key} = q|6.7|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.getbindings/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.get_stdisp/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.defmenu/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:WTimer.reset/;
+$external_latex_labels{$key} = q|6.1.13|;
+$noresave{$key} = "$nosave";
+
$key = q/fig:borders/;
$external_latex_labels{$key} = q|4.1|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WScreen.id/;
-$external_latex_labels{$key} = q|6.1.11|;
+$external_latex_labels{$key} = q|6.1.12|;
$noresave{$key} = "$nosave";
$key = q/fn:WFrame.set_mode/;
$noresave{$key} = "$nosave";
$key = q/fn:WMoveresMode.resize/;
-$external_latex_labels{$key} = q|6.1.8|;
+$external_latex_labels{$key} = q|6.1.9|;
$noresave{$key} = "$nosave";
-$key = q/fn:WStatusBar.is_systray_extl/;
-$external_latex_labels{$key} = q|6.7.1|;
+$key = q/sec:statusbar/;
+$external_latex_labels{$key} = q|3.6|;
$noresave{$key} = "$nosave";
$key = q/fn:WMenu.select_nth/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.create_timer/;
+$external_latex_labels{$key} = q|6.1|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WTiling.managed_i/;
$external_latex_labels{$key} = q|6.2.5|;
$noresave{$key} = "$nosave";
$external_latex_labels{$key} = q|2.1|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplitSplit.tl/;
-$external_latex_labels{$key} = q|6.2.4|;
+$key = q/fn:ioncore.defctxmenu/;
+$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$key = q/fn:mod_tiling.mkbottom/;
$external_latex_labels{$key} = q|6.2|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.defctxmenu/;
-$external_latex_labels{$key} = q|6.1|;
+$key = q/fn:WSplitSplit.tl/;
+$external_latex_labels{$key} = q|6.2.4|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.set_selection/;
$external_latex_labels{$key} = q|6.3.3|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.set_name_exact/;
-$external_latex_labels{$key} = q|6.1.9|;
+$key = q/fn:WMPlex.switch_nth/;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
-$key = q/fn:WMPlex.switch_nth/;
-$external_latex_labels{$key} = q|6.1.7|;
+$key = q/fn:WRegion.set_name_exact/;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:WEdln.prev_completion/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:WFrame.set_grattr/;
+$external_latex_labels{$key} = q|6.1.2|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WEdln.forward/;
$external_latex_labels{$key} = q|6.3.2|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WInfoWin.set_text/;
-$external_latex_labels{$key} = q|6.1.6|;
+$external_latex_labels{$key} = q|6.1.7|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.snapshot/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.tabnum.show/;
+$external_latex_labels{$key} = q|6.1|;
+$noresave{$key} = "$nosave";
+
$key = q/region_do_warp_alt/;
$external_latex_labels{$key} = q|6.9|;
$noresave{$key} = "$nosave";
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:mod_statusbar.inform/;
+$external_latex_labels{$key} = q|6.7|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.tagged_i/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WWindow.xid/;
-$external_latex_labels{$key} = q|6.1.12|;
+$external_latex_labels{$key} = q|6.1.14|;
$noresave{$key} = "$nosave";
$key = q/sec:statusbarref/;
$noresave{$key} = "$nosave";
$key = q/fn:gr.read_config/;
-$external_latex_labels{$key} = q|6.1.14|;
+$external_latex_labels{$key} = q|6.1.16|;
$noresave{$key} = "$nosave";
$key = q/fn:WTiling.split_at/;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.screen_of/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.switch_next/;
-$external_latex_labels{$key} = q|6.1.7|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.unsqueeze/;
-$external_latex_labels{$key} = q|6.1|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:WGroup.bottom/;
$external_latex_labels{$key} = q|6.1.3|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.unsqueeze/;
+$external_latex_labels{$key} = q|6.1|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:mod_query.history_search/;
$external_latex_labels{$key} = q|6.3|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WRootWin.current_scr/;
-$external_latex_labels{$key} = q|6.1.10|;
+$external_latex_labels{$key} = q|6.1.11|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.navi_first/;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.set_tagged/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/app:fullhierarchy/;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.groupleader_of/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.get_savefile/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
-$key = q/fn:mod_query.history_push/;
-$external_latex_labels{$key} = q|6.3|;
+$key = q/fn:ioncore.lookup_clientwin/;
+$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$key = q/fn:mod_query.get/;
$external_latex_labels{$key} = q|6.3|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.lookup_clientwin/;
-$external_latex_labels{$key} = q|6.1|;
+$key = q/fn:mod_query.history_push/;
+$external_latex_labels{$key} = q|6.3|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.restart/;
$external_latex_labels{$key} = q|3.5|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplit.parent/;
-$external_latex_labels{$key} = q|6.2.1|;
-$noresave{$key} = "$nosave";
-
$key = q/fn:ioncore.getctxmenu/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:WSplit.parent/;
+$external_latex_labels{$key} = q|6.2.1|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WMoveresMode.rqgeom/;
-$external_latex_labels{$key} = q|6.1.8|;
+$external_latex_labels{$key} = q|6.1.9|;
$noresave{$key} = "$nosave";
$key = q/fn:WStatusBar.get_template_table/;
$noresave{$key} = "$nosave";
$key = q/fn:WWindow.p_move/;
-$external_latex_labels{$key} = q|6.1.12|;
+$external_latex_labels{$key} = q|6.1.14|;
$noresave{$key} = "$nosave";
$key = q/sec:objects/;
$noresave{$key} = "$nosave";
$key = q/fn:WScreen.set_managed_offset/;
-$external_latex_labels{$key} = q|6.1.11|;
+$external_latex_labels{$key} = q|6.1.12|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.get_dir_for/;
$external_latex_labels{$key} = q|6.3.2|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.defer/;
+$external_latex_labels{$key} = q|6.1|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WMenu.select_prev/;
$external_latex_labels{$key} = q|6.4.1|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:table.copy/;
-$external_latex_labels{$key} = q|6.1.16|;
+$external_latex_labels{$key} = q|6.1.18|;
$noresave{$key} = "$nosave";
$key = q/fn:WSplit.rqgeom/;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.managed_i/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:WEdln.set_mark/;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.mx_count/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.attach/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fig:managership/;
$noresave{$key} = "$nosave";
$key = q/fn:WMoveresMode.move/;
-$external_latex_labels{$key} = q|6.1.8|;
+$external_latex_labels{$key} = q|6.1.9|;
$noresave{$key} = "$nosave";
$key = q/fn:mod_tiling.get/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:WHook.listed/;
+$external_latex_labels{$key} = q|6.1.6|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.refresh_stylelist/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.inc_index/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.x_delete_property/;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.rqclose/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.set_activity/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:mod_query.query_runfile/;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.mx_current/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:mod_query.message/;
$external_latex_labels{$key} = q|6.2.4|;
$noresave{$key} = "$nosave";
-$key = q/fn:string.shell_safe/;
-$external_latex_labels{$key} = q|6.1.15|;
-$noresave{$key} = "$nosave";
-
$key = q/fn:mod_query.query_restart/;
$external_latex_labels{$key} = q|6.3|;
$noresave{$key} = "$nosave";
+$key = q/fn:string.shell_safe/;
+$external_latex_labels{$key} = q|6.1.17|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:mod_tiling.set/;
$external_latex_labels{$key} = q|6.2|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.current/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.rqclose_propagate/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/region_notify_hook/;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.begin_kbresize/;
-$external_latex_labels{$key} = q|6.1.9|;
-$noresave{$key} = "$nosave";
-
-$key = q/fn:ioncore.deflayout/;
-$external_latex_labels{$key} = q|6.1|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/sec:classesrolesinstances/;
$external_latex_labels{$key} = q|3.5.2|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.deflayout/;
+$external_latex_labels{$key} = q|6.1|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.tagged_attach/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.is_tagged/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:WEdln.next_completion/;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.set_hidden/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:WMenu.cancel/;
$noresave{$key} = "$nosave";
$key = q/fn:WMoveresMode.geom/;
-$external_latex_labels{$key} = q|6.1.8|;
+$external_latex_labels{$key} = q|6.1.9|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.goto_nth_screen/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/sec:miscref/;
+$external_latex_labels{$key} = q|6.10|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WClientWin.xid/;
$external_latex_labels{$key} = q|6.1.1|;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.name/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.x_get_text_property/;
$noresave{$key} = "$nosave";
$key = q/fn:table.append/;
-$external_latex_labels{$key} = q|6.1.16|;
+$external_latex_labels{$key} = q|6.1.18|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.mclick/;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.set_index/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:mod_query.history_clear/;
$noresave{$key} = "$nosave";
$key = q/fn:WMoveresMode.finish/;
-$external_latex_labels{$key} = q|6.1.8|;
+$external_latex_labels{$key} = q|6.1.9|;
$noresave{$key} = "$nosave";
$key = q/fn:mod_query.query_gotoclient/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:ioncore.match_winprop_dflt/;
+$external_latex_labels{$key} = q|6.1|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.get_paths/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$external_latex_labels{$key} = q|3.2|;
$noresave{$key} = "$nosave";
-$key = q/fn:WFrame.set_numbers/;
-$external_latex_labels{$key} = q|6.1.2|;
+$key = q/fn:mod_statusbar.update/;
+$external_latex_labels{$key} = q|6.7|;
$noresave{$key} = "$nosave";
$key = q/fn:WMoveresMode.cancel/;
-$external_latex_labels{$key} = q|6.1.8|;
+$external_latex_labels{$key} = q|6.1.9|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.submap/;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.is_active/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:WEdln.bkill_word/;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.attach_new/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
+$noresave{$key} = "$nosave";
+
+$key = q/fn:mod_statusbar.create/;
+$external_latex_labels{$key} = q|6.7|;
$noresave{$key} = "$nosave";
$key = q/fn:WGroup.attach/;
$external_latex_labels{$key} = q|6.3|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.defwinprop/;
+$key = q/fn:ioncore.popen_bgread/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.popen_bgread/;
+$key = q/fn:ioncore.defwinprop/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:WSplit.transpose/;
+$external_latex_labels{$key} = q|6.2.1|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WClientWin.kill/;
$external_latex_labels{$key} = q|6.1.1|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplit.transpose/;
-$external_latex_labels{$key} = q|6.2.1|;
+$key = q/fn:ioncore.submap_wait/;
+$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$key = q/ioncore_snapshot_hook/;
$external_latex_labels{$key} = q|6.9|;
$noresave{$key} = "$nosave";
+$key = q/fn:WSplitSplit.dir/;
+$external_latex_labels{$key} = q|6.2.4|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:table.map/;
-$external_latex_labels{$key} = q|6.1.16|;
+$external_latex_labels{$key} = q|6.1.18|;
$noresave{$key} = "$nosave";
-$key = q/fn:WSplitSplit.dir/;
-$external_latex_labels{$key} = q|6.2.4|;
+$key = q/fn:WMPlex.set_stdisp/;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:WFrame.set_shaded/;
$external_latex_labels{$key} = q|6.1.2|;
$noresave{$key} = "$nosave";
-$key = q/fn:WMPlex.set_stdisp/;
-$external_latex_labels{$key} = q|6.1.7|;
+$key = q/fn:WStatusBar.is_systray/;
+$external_latex_labels{$key} = q|6.7.1|;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.manager/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.x_change_property/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
-$key = q/fn:WInput.cancel/;
-$external_latex_labels{$key} = q|6.3.3|;
+$key = q/fn:WRegion.parent/;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
-$key = q/fn:WRegion.parent/;
-$external_latex_labels{$key} = q|6.1.9|;
+$key = q/fn:WInput.cancel/;
+$external_latex_labels{$key} = q|6.3.3|;
$noresave{$key} = "$nosave";
$key = q/fn:WEdln.back/;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.geom/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.kpress_wait/;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.rootwin_of/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.mx_i/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/clientwin_do_manage_alt/;
$external_latex_labels{$key} = q|6.9|;
$noresave{$key} = "$nosave";
-$key = q/fn:ioncore.match_winprop_name/;
-$external_latex_labels{$key} = q|6.1|;
-$noresave{$key} = "$nosave";
-
$key = q/ioncore_sigchld_hook/;
$external_latex_labels{$key} = q|6.9|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:gr.refresh/;
-$external_latex_labels{$key} = q|6.1.14|;
+$external_latex_labels{$key} = q|6.1.16|;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.rqorder/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:mod_menu.grabmenu/;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.size_hints/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:WEdln.delete/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/fn:WHook.remove/;
+$external_latex_labels{$key} = q|6.1.6|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:ioncore.request_selection/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.goto/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.goto_next_screen/;
$external_latex_labels{$key} = q|6.1|;
$noresave{$key} = "$nosave";
+$key = q/sec:grmisc/;
+$external_latex_labels{$key} = q|4.3|;
+$noresave{$key} = "$nosave";
+
$key = q/chap:prelim/;
$external_latex_labels{$key} = q|2|;
$noresave{$key} = "$nosave";
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.is_activity/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
+$noresave{$key} = "$nosave";
+
+$key = q/sec:statusd/;
+$external_latex_labels{$key} = q|5.4|;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.rqgeom/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:WInput.scrolldown/;
$external_latex_labels{$key} = q|6.2|;
$noresave{$key} = "$nosave";
+$key = q/fn:WTimer.is_set/;
+$external_latex_labels{$key} = q|6.1.13|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WRegion.set_name/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:table.join/;
-$external_latex_labels{$key} = q|6.1.16|;
+$external_latex_labels{$key} = q|6.1.18|;
$noresave{$key} = "$nosave";
$key = q/fn:ioncore.activity_first/;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.is_hidden/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:WRegion.get_configuration/;
-$external_latex_labels{$key} = q|6.1.9|;
+$external_latex_labels{$key} = q|6.1.10|;
$noresave{$key} = "$nosave";
$key = q/fn:mod_menu.get/;
$noresave{$key} = "$nosave";
$key = q/fn:export/;
-$external_latex_labels{$key} = q|6.1.13|;
+$external_latex_labels{$key} = q|6.1.15|;
$noresave{$key} = "$nosave";
$key = q/chap:gr/;
$noresave{$key} = "$nosave";
$key = q/fn:table.icat/;
-$external_latex_labels{$key} = q|6.1.16|;
+$external_latex_labels{$key} = q|6.1.18|;
$noresave{$key} = "$nosave";
$key = q/fn:WEdln.kill_line/;
$noresave{$key} = "$nosave";
$key = q/fn:WMPlex.get_index/;
-$external_latex_labels{$key} = q|6.1.7|;
+$external_latex_labels{$key} = q|6.1.8|;
$noresave{$key} = "$nosave";
$key = q/fn:WEdln.skip_word/;
$external_latex_labels{$key} = q|6.3.2|;
$noresave{$key} = "$nosave";
+$key = q/ioncore_submap_ungrab_hook/;
+$external_latex_labels{$key} = q|6.9|;
+$noresave{$key} = "$nosave";
+
$key = q/fn:WGroup.attach_new/;
$external_latex_labels{$key} = q|6.1.3|;
$noresave{$key} = "$nosave";
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html133"
+<A NAME="tex2html144"
HREF="node2.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html129"
+<A NAME="tex2html140"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html123"
+<A NAME="tex2html134"
HREF="ionconf.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html131"
+<A NAME="tex2html142"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html134"
+<B> Next:</B> <A NAME="tex2html145"
HREF="node2.html">1. Introduction</A>
-<B> Up:</B> <A NAME="tex2html130"
+<B> Up:</B> <A NAME="tex2html141"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html124"
+<B> Previous:</B> <A NAME="tex2html135"
HREF="ionconf.html">Configuring and extending Ion3</A>
- <B> <A NAME="tex2html132"
+ <B> <A NAME="tex2html143"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
<!--Table of Contents-->
<UL CLASS="TofC">
-<LI><A NAME="tex2html135"
+<LI><A NAME="tex2html146"
HREF="node2.html">1. Introduction</A>
-<LI><A NAME="tex2html136"
+<LI><A NAME="tex2html147"
HREF="node3.html">2. Preliminaries: Key concepts and relations</A>
<UL>
-<LI><A NAME="tex2html137"
+<LI><A NAME="tex2html148"
HREF="node3.html#SECTION00310000000000000000">2.1 Modules</A>
-<LI><A NAME="tex2html138"
+<LI><A NAME="tex2html149"
HREF="node3.html#SECTION00320000000000000000">2.2 Class and object hierarchies</A>
<UL>
-<LI><A NAME="tex2html139"
+<LI><A NAME="tex2html150"
HREF="node3.html#SECTION00321000000000000000">2.2.1 Class hierarchy</A>
-<LI><A NAME="tex2html140"
+<LI><A NAME="tex2html151"
HREF="node3.html#SECTION00322000000000000000">2.2.2 Object hierarchies: WRegion parents and managers</A>
-<LI><A NAME="tex2html141"
+<LI><A NAME="tex2html152"
HREF="node3.html#SECTION00323000000000000000">2.2.3 Summary</A>
</UL>
</UL>
<BR>
-<LI><A NAME="tex2html142"
+<LI><A NAME="tex2html153"
HREF="node4.html">3. Basic configuration</A>
<UL>
-<LI><A NAME="tex2html143"
+<LI><A NAME="tex2html154"
HREF="node4.html#SECTION00410000000000000000">3.1 The configuration files</A>
-<LI><A NAME="tex2html144"
+<LI><A NAME="tex2html155"
HREF="node4.html#SECTION00420000000000000000">3.2 A walk through cfg_ion.lua</A>
-<LI><A NAME="tex2html145"
+<LI><A NAME="tex2html156"
HREF="node4.html#SECTION00430000000000000000">3.3 Keys and rodents</A>
<UL>
-<LI><A NAME="tex2html146"
+<LI><A NAME="tex2html157"
HREF="node4.html#SECTION00431000000000000000">3.3.1 Binding handlers and special variables</A>
-<LI><A NAME="tex2html147"
+<LI><A NAME="tex2html158"
HREF="node4.html#SECTION00432000000000000000">3.3.2 Guards</A>
-<LI><A NAME="tex2html148"
+<LI><A NAME="tex2html159"
HREF="node4.html#SECTION00433000000000000000">3.3.3 Defining the bindings</A>
-<LI><A NAME="tex2html149"
+<LI><A NAME="tex2html160"
HREF="node4.html#SECTION00434000000000000000">3.3.4 Examples</A>
-<LI><A NAME="tex2html150"
+<LI><A NAME="tex2html161"
HREF="node4.html#SECTION00435000000000000000">3.3.5 Key specifications</A>
-<LI><A NAME="tex2html151"
+<LI><A NAME="tex2html162"
HREF="node4.html#SECTION00436000000000000000">3.3.6 Button specifications</A>
-<LI><A NAME="tex2html152"
+<LI><A NAME="tex2html163"
HREF="node4.html#SECTION00437000000000000000">3.3.7 A further note on the default binding configuration</A>
</UL>
-<LI><A NAME="tex2html153"
+<LI><A NAME="tex2html164"
HREF="node4.html#SECTION00440000000000000000">3.4 Menus</A>
<UL>
-<LI><A NAME="tex2html154"
+<LI><A NAME="tex2html165"
HREF="node4.html#SECTION00441000000000000000">3.4.1 Defining menus</A>
-<LI><A NAME="tex2html155"
+<LI><A NAME="tex2html166"
HREF="node4.html#SECTION00442000000000000000">3.4.2 Special menus</A>
-<LI><A NAME="tex2html156"
+<LI><A NAME="tex2html167"
HREF="node4.html#SECTION00443000000000000000">3.4.3 Defining context menus</A>
-<LI><A NAME="tex2html157"
+<LI><A NAME="tex2html168"
HREF="node4.html#SECTION00444000000000000000">3.4.4 Displaying menus</A>
</UL>
-<LI><A NAME="tex2html158"
+<LI><A NAME="tex2html169"
HREF="node4.html#SECTION00450000000000000000">3.5 Winprops</A>
<UL>
-<LI><A NAME="tex2html159"
+<LI><A NAME="tex2html170"
HREF="node4.html#SECTION00451000000000000000">3.5.1 Sizehint winprops</A>
-<LI><A NAME="tex2html160"
+<LI><A NAME="tex2html171"
HREF="node4.html#SECTION00452000000000000000">3.5.2 Classes, roles and instances</A>
-<LI><A NAME="tex2html161"
+<LI><A NAME="tex2html172"
HREF="node4.html#SECTION00453000000000000000">3.5.3 Finding window identification</A>
-<LI><A NAME="tex2html162"
+<LI><A NAME="tex2html173"
HREF="node4.html#SECTION00454000000000000000">3.5.4 Some common examples</A>
</UL>
+<LI><A NAME="tex2html174"
+ HREF="node4.html#SECTION00460000000000000000">3.6 The statusbar</A>
+<UL>
+<LI><A NAME="tex2html175"
+ HREF="node4.html#SECTION00461000000000000000">3.6.1 The template</A>
+<LI><A NAME="tex2html176"
+ HREF="node4.html#SECTION00462000000000000000">3.6.2 The systray</A>
+<LI><A NAME="tex2html177"
+ HREF="node4.html#SECTION00463000000000000000">3.6.3 Monitors</A>
+</UL>
</UL>
<BR>
-<LI><A NAME="tex2html163"
+<LI><A NAME="tex2html178"
HREF="node5.html">4. Graphical styles</A>
<UL>
-<LI><A NAME="tex2html164"
+<LI><A NAME="tex2html179"
HREF="node5.html#SECTION00510000000000000000">4.1 Drawing engines, style specifications and sub-styles</A>
<UL>
-<LI><A NAME="tex2html165"
+<LI><A NAME="tex2html180"
HREF="node5.html#SECTION00511000000000000000">4.1.1 Known styles and substyles</A>
</UL>
-<LI><A NAME="tex2html166"
+<LI><A NAME="tex2html181"
HREF="node5.html#SECTION00520000000000000000">4.2 Defining styles for the default drawing engine</A>
<UL>
-<LI><A NAME="tex2html167"
+<LI><A NAME="tex2html182"
HREF="node5.html#SECTION00521000000000000000">4.2.1 The structure of the configuration files</A>
-<LI><A NAME="tex2html168"
+<LI><A NAME="tex2html183"
HREF="node5.html#SECTION00522000000000000000">4.2.2 Defining the styles</A>
-<LI><A NAME="tex2html169"
+<LI><A NAME="tex2html184"
HREF="node5.html#SECTION00523000000000000000">4.2.3 An example</A>
</UL>
-<LI><A NAME="tex2html170"
+<LI><A NAME="tex2html185"
HREF="node5.html#SECTION00530000000000000000">4.3 Miscellaneous settings</A>
<UL>
-<LI><A NAME="tex2html171"
- HREF="node5.html#SECTION00531000000000000000">4.3.1 Extra fields for style frame</A>
-<LI><A NAME="tex2html172"
- HREF="node5.html#SECTION00532000000000000000">4.3.2 Extra fields for style dock</A>
+<LI><A NAME="tex2html186"
+ HREF="node5.html#SECTION00531000000000000000">4.3.1 Frame user attributes</A>
+<LI><A NAME="tex2html187"
+ HREF="node5.html#SECTION00532000000000000000">4.3.2 Extra fields for style `frame'</A>
+<LI><A NAME="tex2html188"
+ HREF="node5.html#SECTION00533000000000000000">4.3.3 Extra fields for style `dock'</A>
</UL>
</UL>
<BR>
-<LI><A NAME="tex2html173"
+<LI><A NAME="tex2html189"
HREF="node6.html">5. Scripting</A>
<UL>
-<LI><A NAME="tex2html174"
+<LI><A NAME="tex2html190"
HREF="node6.html#SECTION00610000000000000000">5.1 Hooks</A>
-<LI><A NAME="tex2html175"
+<LI><A NAME="tex2html191"
HREF="node6.html#SECTION00620000000000000000">5.2 Referring to regions</A>
<UL>
-<LI><A NAME="tex2html176"
+<LI><A NAME="tex2html192"
HREF="node6.html#SECTION00621000000000000000">5.2.1 Direct object references</A>
-<LI><A NAME="tex2html177"
+<LI><A NAME="tex2html193"
HREF="node6.html#SECTION00622000000000000000">5.2.2 Name-based lookups</A>
</UL>
-<LI><A NAME="tex2html178"
+<LI><A NAME="tex2html194"
HREF="node6.html#SECTION00630000000000000000">5.3 Alternative winprop selection criteria</A>
-<LI><A NAME="tex2html179"
+<LI><A NAME="tex2html195"
HREF="node6.html#SECTION00640000000000000000">5.4 Writing ion-statusd monitors</A>
</UL>
<BR>
-<LI><A NAME="tex2html180"
+<LI><A NAME="tex2html196"
HREF="node7.html">6. Function reference</A>
<UL>
-<LI><A NAME="tex2html181"
+<LI><A NAME="tex2html197"
HREF="node7.html#SECTION00710000000000000000">6.1 Functions defined in ioncore</A>
<UL>
-<LI><A NAME="tex2html182"
+<LI><A NAME="tex2html198"
HREF="node7.html#SECTION00711000000000000000">6.1.1 WClientWin functions</A>
-<LI><A NAME="tex2html183"
+<LI><A NAME="tex2html199"
HREF="node7.html#SECTION00712000000000000000">6.1.2 WFrame functions</A>
-<LI><A NAME="tex2html184"
+<LI><A NAME="tex2html200"
HREF="node7.html#SECTION00713000000000000000">6.1.3 WGroup functions</A>
-<LI><A NAME="tex2html185"
+<LI><A NAME="tex2html201"
HREF="node7.html#SECTION00714000000000000000">6.1.4 WGroupCW functions</A>
-<LI><A NAME="tex2html186"
+<LI><A NAME="tex2html202"
HREF="node7.html#SECTION00715000000000000000">6.1.5 WGroupWS functions</A>
-<LI><A NAME="tex2html187"
- HREF="node7.html#SECTION00716000000000000000">6.1.6 WInfoWin functions</A>
-<LI><A NAME="tex2html188"
- HREF="node7.html#SECTION00717000000000000000">6.1.7 WMPlex functions</A>
-<LI><A NAME="tex2html189"
- HREF="node7.html#SECTION00718000000000000000">6.1.8 WMoveresMode functions</A>
-<LI><A NAME="tex2html190"
- HREF="node7.html#SECTION00719000000000000000">6.1.9 WRegion functions</A>
-<LI><A NAME="tex2html191"
- HREF="node7.html#SECTION007110000000000000000">6.1.10 WRootWin functions</A>
-<LI><A NAME="tex2html192"
- HREF="node7.html#SECTION007111000000000000000">6.1.11 WScreen functions</A>
-<LI><A NAME="tex2html193"
- HREF="node7.html#SECTION007112000000000000000">6.1.12 WWindow functions</A>
-<LI><A NAME="tex2html194"
- HREF="node7.html#SECTION007113000000000000000">6.1.13 global functions</A>
-<LI><A NAME="tex2html195"
- HREF="node7.html#SECTION007114000000000000000">6.1.14 gr functions</A>
-<LI><A NAME="tex2html196"
- HREF="node7.html#SECTION007115000000000000000">6.1.15 string functions</A>
-<LI><A NAME="tex2html197"
- HREF="node7.html#SECTION007116000000000000000">6.1.16 table functions</A>
+<LI><A NAME="tex2html203"
+ HREF="node7.html#SECTION00716000000000000000">6.1.6 WHook functions</A>
+<LI><A NAME="tex2html204"
+ HREF="node7.html#SECTION00717000000000000000">6.1.7 WInfoWin functions</A>
+<LI><A NAME="tex2html205"
+ HREF="node7.html#SECTION00718000000000000000">6.1.8 WMPlex functions</A>
+<LI><A NAME="tex2html206"
+ HREF="node7.html#SECTION00719000000000000000">6.1.9 WMoveresMode functions</A>
+<LI><A NAME="tex2html207"
+ HREF="node7.html#SECTION007110000000000000000">6.1.10 WRegion functions</A>
+<LI><A NAME="tex2html208"
+ HREF="node7.html#SECTION007111000000000000000">6.1.11 WRootWin functions</A>
+<LI><A NAME="tex2html209"
+ HREF="node7.html#SECTION007112000000000000000">6.1.12 WScreen functions</A>
+<LI><A NAME="tex2html210"
+ HREF="node7.html#SECTION007113000000000000000">6.1.13 WTimer functions</A>
+<LI><A NAME="tex2html211"
+ HREF="node7.html#SECTION007114000000000000000">6.1.14 WWindow functions</A>
+<LI><A NAME="tex2html212"
+ HREF="node7.html#SECTION007115000000000000000">6.1.15 global functions</A>
+<LI><A NAME="tex2html213"
+ HREF="node7.html#SECTION007116000000000000000">6.1.16 gr functions</A>
+<LI><A NAME="tex2html214"
+ HREF="node7.html#SECTION007117000000000000000">6.1.17 string functions</A>
+<LI><A NAME="tex2html215"
+ HREF="node7.html#SECTION007118000000000000000">6.1.18 table functions</A>
</UL>
-<LI><A NAME="tex2html198"
+<LI><A NAME="tex2html216"
HREF="node7.html#SECTION00720000000000000000">6.2 Functions defined in mod_tiling</A>
<UL>
-<LI><A NAME="tex2html199"
+<LI><A NAME="tex2html217"
HREF="node7.html#SECTION00721000000000000000">6.2.1 WSplit functions</A>
-<LI><A NAME="tex2html200"
+<LI><A NAME="tex2html218"
HREF="node7.html#SECTION00722000000000000000">6.2.2 WSplitInner functions</A>
-<LI><A NAME="tex2html201"
+<LI><A NAME="tex2html219"
HREF="node7.html#SECTION00723000000000000000">6.2.3 WSplitRegion functions</A>
-<LI><A NAME="tex2html202"
+<LI><A NAME="tex2html220"
HREF="node7.html#SECTION00724000000000000000">6.2.4 WSplitSplit functions</A>
-<LI><A NAME="tex2html203"
+<LI><A NAME="tex2html221"
HREF="node7.html#SECTION00725000000000000000">6.2.5 WTiling functions</A>
</UL>
-<LI><A NAME="tex2html204"
+<LI><A NAME="tex2html222"
HREF="node7.html#SECTION00730000000000000000">6.3 Functions defined in mod_query</A>
<UL>
-<LI><A NAME="tex2html205"
+<LI><A NAME="tex2html223"
HREF="node7.html#SECTION00731000000000000000">6.3.1 WComplProxy functions</A>
-<LI><A NAME="tex2html206"
+<LI><A NAME="tex2html224"
HREF="node7.html#SECTION00732000000000000000">6.3.2 WEdln functions</A>
-<LI><A NAME="tex2html207"
+<LI><A NAME="tex2html225"
HREF="node7.html#SECTION00733000000000000000">6.3.3 WInput functions</A>
</UL>
-<LI><A NAME="tex2html208"
+<LI><A NAME="tex2html226"
HREF="node7.html#SECTION00740000000000000000">6.4 Functions defined in mod_menu</A>
<UL>
-<LI><A NAME="tex2html209"
+<LI><A NAME="tex2html227"
HREF="node7.html#SECTION00741000000000000000">6.4.1 WMenu functions</A>
</UL>
-<LI><A NAME="tex2html210"
+<LI><A NAME="tex2html228"
HREF="node7.html#SECTION00750000000000000000">6.5 Functions defined in mod_dock</A>
<UL>
-<LI><A NAME="tex2html211"
+<LI><A NAME="tex2html229"
HREF="node7.html#SECTION00751000000000000000">6.5.1 WDock functions</A>
</UL>
-<LI><A NAME="tex2html212"
+<LI><A NAME="tex2html230"
HREF="node7.html#SECTION00760000000000000000">6.6 Functions defined in mod_sp</A>
-<LI><A NAME="tex2html213"
+<LI><A NAME="tex2html231"
HREF="node7.html#SECTION00770000000000000000">6.7 Functions defined in mod_statusbar</A>
<UL>
-<LI><A NAME="tex2html214"
+<LI><A NAME="tex2html232"
HREF="node7.html#SECTION00771000000000000000">6.7.1 WStatusBar functions</A>
</UL>
-<LI><A NAME="tex2html215"
+<LI><A NAME="tex2html233"
HREF="node7.html#SECTION00780000000000000000">6.8 Functions defined in de</A>
-<LI><A NAME="tex2html216"
+<LI><A NAME="tex2html234"
HREF="node7.html#SECTION00790000000000000000">6.9 Hooks</A>
+<LI><A NAME="tex2html235"
+ HREF="node7.html#SECTION007100000000000000000">6.10 Miscellaneous</A>
+<UL>
+<LI><A NAME="tex2html236"
+ HREF="node7.html#SECTION007101000000000000000">6.10.1 Size policies</A>
+</UL>
</UL>
<BR>
-<LI><A NAME="tex2html217"
+<LI><A NAME="tex2html237"
HREF="node8.html">A. The GNU General Public License</A>
-<LI><A NAME="tex2html218"
+<LI><A NAME="tex2html238"
HREF="node9.html">B. Full class hierarchy visible to Lua-side</A>
-<LI><A NAME="tex2html219"
+<LI><A NAME="tex2html239"
HREF="node11.html">Index</A>
+<LI><A NAME="tex2html240"
+ HREF="node12.html">Bibliography</A>
</UL>
<!--End of Table of Contents-->
<P>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html434"
+<A NAME="tex2html466"
HREF="node11.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html428"
+<A NAME="tex2html460"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html422"
+<A NAME="tex2html454"
HREF="node9.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html430"
+<A NAME="tex2html462"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html432"
+<A NAME="tex2html464"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html435"
+<B> Next:</B> <A NAME="tex2html467"
HREF="node11.html">Index</A>
-<B> Up:</B> <A NAME="tex2html429"
+<B> Up:</B> <A NAME="tex2html461"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html423"
+<B> Previous:</B> <A NAME="tex2html455"
HREF="node9.html">B. Full class hierarchy</A>
- <B> <A NAME="tex2html431"
+ <B> <A NAME="tex2html463"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html433"
+ <B> <A NAME="tex2html465"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
<BR><A HREF="node7.html#fn:ioncore.chdir_for"><TT>ioncore.chdir_for</TT></A>
<BR><A HREF="node7.html#fn:ioncore.clientwin_i"><TT>ioncore.clientwin_i</TT></A>
<BR><A HREF="node7.html#fn:ioncore.compile_cmd"><TT>ioncore.compile_cmd</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.create_timer"><TT>ioncore.create_timer</TT></A>
<BR><A HREF="node7.html#fn:ioncore.create_ws"><TT>ioncore.create_ws</TT></A>
<BR><A HREF="node7.html#fn:ioncore.current"><TT>ioncore.current</TT></A>
<BR><A HREF="node7.html#fn:ioncore.defbindings"><TT>ioncore.defbindings</TT></A>
<BR><A HREF="node7.html#fn:ioncore.defctxmenu"><TT>ioncore.defctxmenu</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.defer"><TT>ioncore.defer</TT></A>
<BR><A HREF="node7.html#fn:ioncore.deflayout"><TT>ioncore.deflayout</TT></A>
<BR><A HREF="node7.html#fn:ioncore.defmenu"><TT>ioncore.defmenu</TT></A>
<BR><A HREF="node7.html#fn:ioncore.defshortening"><TT>ioncore.defshortening</TT></A>
<BR><A HREF="node7.html#fn:ioncore.getbindings"><TT>ioncore.getbindings</TT></A>
<BR><A HREF="node7.html#fn:ioncore.getctxmenu"><TT>ioncore.getctxmenu</TT></A>
<BR><A HREF="node7.html#fn:ioncore.get_dir_for"><TT>ioncore.get_dir_for</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.get_hook"><TT>ioncore.get_hook</TT></A>
<BR><A HREF="node7.html#fn:ioncore.getlayout"><TT>ioncore.getlayout</TT></A>
<BR><A HREF="node7.html#fn:ioncore.getmenu"><TT>ioncore.getmenu</TT></A>
<BR><A HREF="node7.html#fn:ioncore.get_paths"><TT>ioncore.get_paths</TT></A>
<BR><A HREF="node7.html#fn:ioncore.lookup_clientwin"><TT>ioncore.lookup_clientwin</TT></A>
<BR><A HREF="node7.html#fn:ioncore.lookup_region"><TT>ioncore.lookup_region</TT></A>
<BR><A HREF="node7.html#fn:ioncore.lookup_script"><TT>ioncore.lookup_script</TT></A>
-<BR><A HREF="node7.html#fn:ioncore.match_winprop_name"><TT>ioncore.match_winprop_name</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.match_winprop_dflt"><TT>ioncore.match_winprop_dflt</TT></A>
<BR><A HREF="node7.html#fn:ioncore.mclick"><TT>ioncore.mclick</TT></A>
<BR><A HREF="node7.html#fn:ioncore.mdblclick"><TT>ioncore.mdblclick</TT></A>
<BR><A HREF="node7.html#fn:ioncore.mdrag"><TT>ioncore.mdrag</TT></A>
<BR><A HREF="node7.html#fn:ioncore.shutdown"><TT>ioncore.shutdown</TT></A>
<BR><A HREF="node7.html#fn:ioncore.snapshot"><TT>ioncore.snapshot</TT></A>
<BR><A HREF="node7.html#fn:ioncore.submap"><TT>ioncore.submap</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.submap_enter"><TT>ioncore.submap_enter</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.submap_wait"><TT>ioncore.submap_wait</TT></A>
<BR><A HREF="node7.html#fn:ioncore.submenu"><TT>ioncore.submenu</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.tabnum.clear"><TT>ioncore.tabnum.clear</TT></A>
+<BR><A HREF="node7.html#fn:ioncore.tabnum.show"><TT>ioncore.tabnum.show</TT></A>
<BR><A HREF="node7.html#fn:ioncore.tagged_attach"><TT>ioncore.tagged_attach</TT></A>
<BR><A HREF="node7.html#fn:ioncore.tagged_clear"><TT>ioncore.tagged_clear</TT></A>
<BR><A HREF="node7.html#fn:ioncore.tagged_first"><TT>ioncore.tagged_first</TT></A>
<BR><A HREF="node7.html#fn:mod_query.warn"><TT>mod_query.warn</TT></A>
<BR><A HREF="node7.html#fn:mod_sp.set_shown"><TT>mod_sp.set_shown</TT></A>
<BR><A HREF="node7.html#fn:mod_sp.set_shown_on"><TT>mod_sp.set_shown_on</TT></A>
+<BR><A HREF="node7.html#fn:mod_statusbar.create"><TT>mod_statusbar.create</TT></A>
+<BR><A HREF="node7.html#fn:mod_statusbar.inform"><TT>mod_statusbar.inform</TT></A>
+<BR><A HREF="node7.html#fn:mod_statusbar.launch_statusd"><TT>mod_statusbar.launch_statusd</TT></A>
<BR><A HREF="node7.html#fn:mod_statusbar.statusbars"><TT>mod_statusbar.statusbars</TT></A>
+<BR><A HREF="node7.html#fn:mod_statusbar.update"><TT>mod_statusbar.update</TT></A>
<BR><A HREF="node7.html#fn:mod_tiling.get"><TT>mod_tiling.get</TT></A>
<BR><A HREF="node7.html#fn:mod_tiling.mkbottom"><TT>mod_tiling.mkbottom</TT></A>
<BR><A HREF="node7.html#fn:mod_tiling.set"><TT>mod_tiling.set</TT></A>
<BR><A HREF="node7.html#fn:WFrame.mode"><TT>WFrame.mode</TT></A>
<BR><A HREF="node7.html#fn:WFrame.p_switch_tab"><TT>WFrame.p_switch_tab</TT></A>
<BR><A HREF="node7.html#fn:WFrame.p_tabdrag"><TT>WFrame.p_tabdrag</TT></A>
+<BR><A HREF="node7.html#fn:WFrame.set_grattr"><TT>WFrame.set_grattr</TT></A>
<BR><A HREF="node7.html#fn:WFrame.set_mode"><TT>WFrame.set_mode</TT></A>
-<BR><A HREF="node7.html#fn:WFrame.set_numbers"><TT>WFrame.set_numbers</TT></A>
<BR><A HREF="node7.html#fn:WFrame.set_shaded"><TT>WFrame.set_shaded</TT></A>
<BR><A HREF="node7.html#fn:WGroup.attach"><TT>WGroup.attach</TT></A>
<BR><A HREF="node7.html#fn:WGroup.attach_new"><TT>WGroup.attach_new</TT></A>
<BR><A HREF="node7.html#fn:WGroup.set_bottom"><TT>WGroup.set_bottom</TT></A>
<BR><A HREF="node7.html#fn:WGroup.set_fullscreen"><TT>WGroup.set_fullscreen</TT></A>
<BR><A HREF="node7.html#fn:WGroupWS.attach_framed"><TT>WGroupWS.attach_framed</TT></A>
+<BR><A HREF="node7.html#fn:WHook.add"><TT>WHook.add</TT></A>
+<BR><A HREF="node7.html#fn:WHook.listed"><TT>WHook.listed</TT></A>
+<BR><A HREF="node7.html#fn:WHook.remove"><TT>WHook.remove</TT></A>
<BR><A HREF="node7.html#fn:WInfoWin.set_text"><TT>WInfoWin.set_text</TT></A>
<BR><A HREF="node7.html#fn:WInput.cancel"><TT>WInput.cancel</TT></A>
<BR><A HREF="node7.html#fn:WInput.scrolldown"><TT>WInput.scrolldown</TT></A>
<BR><A HREF="node7.html#fn:WSplitSplit.tl"><TT>WSplitSplit.tl</TT></A>
<BR><A HREF="node7.html#fn:WSplit.transpose"><TT>WSplit.transpose</TT></A>
<BR><A HREF="node7.html#fn:WStatusBar.get_template_table"><TT>WStatusBar.get_template_table</TT></A>
-<BR><A HREF="node7.html#fn:WStatusBar.is_systray_extl"><TT>WStatusBar.is_systray_extl</TT></A>
+<BR><A HREF="node7.html#fn:WStatusBar.is_systray"><TT>WStatusBar.is_systray</TT></A>
<BR><A HREF="node7.html#fn:WStatusBar.set_systray"><TT>WStatusBar.set_systray</TT></A>
<BR><A HREF="node7.html#fn:WStatusBar.set_template"><TT>WStatusBar.set_template</TT></A>
<BR><A HREF="node7.html#fn:WStatusBar.set_template_table"><TT>WStatusBar.set_template_table</TT></A>
<BR><A HREF="node7.html#fn:WTiling.split_tree"><TT>WTiling.split_tree</TT></A>
<BR><A HREF="node7.html#fn:WTiling.transpose_at"><TT>WTiling.transpose_at</TT></A>
<BR><A HREF="node7.html#fn:WTiling.unsplit_at"><TT>WTiling.unsplit_at</TT></A>
+<BR><A HREF="node7.html#fn:WTimer.is_set"><TT>WTimer.is_set</TT></A>
+<BR><A HREF="node7.html#fn:WTimer.reset"><TT>WTimer.reset</TT></A>
+<BR><A HREF="node7.html#fn:WTimer.set"><TT>WTimer.set</TT></A>
<BR><A HREF="node7.html#fn:WWindow.p_move"><TT>WWindow.p_move</TT></A>
<BR><A HREF="node7.html#fn:WWindow.p_resize"><TT>WWindow.p_resize</TT></A>
<BR><A HREF="node7.html#fn:WWindow.xid"><TT>WWindow.xid</TT></A>
<BR>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
-<A NAME="tex2html434"
+<A NAME="tex2html466"
HREF="node11.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html428"
+<A NAME="tex2html460"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html422"
+<A NAME="tex2html454"
HREF="node9.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html430"
+<A NAME="tex2html462"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html432"
+<A NAME="tex2html464"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html435"
+<B> Next:</B> <A NAME="tex2html467"
HREF="node11.html">Index</A>
-<B> Up:</B> <A NAME="tex2html429"
+<B> Up:</B> <A NAME="tex2html461"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html423"
+<B> Previous:</B> <A NAME="tex2html455"
HREF="node9.html">B. Full class hierarchy</A>
- <B> <A NAME="tex2html431"
+ <B> <A NAME="tex2html463"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html433"
+ <B> <A NAME="tex2html465"
HREF="node11.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html446"
+<A NAME="tex2html478"
HREF="node12.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html442"
+<A NAME="tex2html474"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html436"
+<A NAME="tex2html468"
HREF="node10.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html444"
+<A NAME="tex2html476"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html447"
- HREF="node12.html">About this document ...</A>
-<B> Up:</B> <A NAME="tex2html443"
+<B> Next:</B> <A NAME="tex2html479"
+ HREF="node12.html">Bibliography</A>
+<B> Up:</B> <A NAME="tex2html475"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html437"
+<B> Previous:</B> <A NAME="tex2html469"
HREF="node10.html">List of functions</A>
- <B> <A NAME="tex2html445"
+ <B> <A NAME="tex2html477"
HREF="node1.html">Contents</A></B>
<BR>
<BR></DIV>
<H2><A NAME="SECTION001100000000000000000">
Index</A>
</H2><HR><DL>
-<DD><STRONG><TT>aboutmsg</TT></STRONG>
- : <A HREF="node7.html#4407"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>acrobatic</TT></STRONG>
- : <A HREF="node4.html#1438"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>activity_first</TT></STRONG>
- : <A HREF="node7.html#4409"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>activity_i</TT></STRONG>
- : <A HREF="node7.html#4411"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1451"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><SPAN CLASS="textbf">Alt</SPAN></STRONG>
- : <A HREF="node4.html#878"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#883"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><SPAN CLASS="textbf">AnyModifier</SPAN></STRONG>
- : <A HREF="node4.html#876"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>append</TT></STRONG>
- : <A HREF="node7.html#4712"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+ : <A HREF="node4.html#881"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><TT>resizeinc</TT></STRONG>
- : <A HREF="node4.html#1453"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node4.html#1454"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>attach</TT></STRONG>
- : <A HREF="node7.html#4564"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#4586"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
- | <A HREF="node7.html#9346"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>attach_framed</TT></STRONG>
- : <A HREF="node7.html#4580"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>attach_new</TT></STRONG>
- : <A HREF="node7.html#4566"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#4588"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>back</TT></STRONG>
- : <A HREF="node7.html#8235"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>backspace</TT></STRONG>
- : <A HREF="node7.html#8237"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bdoc</TT></STRONG>
- : <A HREF="node7.html#4365"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>begin_kbresize</TT></STRONG>
- : <A HREF="node7.html#4636"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>bkill_word</TT></STRONG>
- : <A HREF="node7.html#8239"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bol</TT></STRONG>
- : <A HREF="node7.html#8241"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bottom</TT></STRONG>
- : <A HREF="node7.html#4568"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>br</TT></STRONG>
- : <A HREF="node7.html#7135"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>bskip_word</TT></STRONG>
- : <A HREF="node7.html#8243"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node4.html#1466"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node4.html#1467"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><SPAN CLASS="textbf">Button-n</SPAN></STRONG>
- : <A HREF="node4.html#882"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>cancel</TT></STRONG>
- : <A HREF="node7.html#4623"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
- | <A HREF="node7.html#8302"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#9134"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>chdir_for</TT></STRONG>
- : <A HREF="node7.html#4367"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#887"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
<DD><STRONG><TT>class</TT></STRONG><DL>
-<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1460"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1473"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
</DL>
-<DD><STRONG><TT>clear_mark</TT></STRONG>
- : <A HREF="node7.html#8245"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
<DD><STRONG><TT>clientwin_do_manage_alt</TT></STRONG>
- : <A HREF="node7.html#9877"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>clientwin_i</TT></STRONG>
- : <A HREF="node7.html#4413"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node7.html#8232"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><TT>clientwin_mapped_hook</TT></STRONG>
- : <A HREF="node7.html#9878"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8233"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><TT>clientwin_property_change_hook</TT></STRONG>
- : <A HREF="node7.html#9879"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8234"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><TT>clientwin_unmapped_hook</TT></STRONG>
- : <A HREF="node7.html#9880"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>compile_cmd</TT></STRONG>
- : <A HREF="node7.html#4369"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>complete</TT></STRONG>
- : <A HREF="node7.html#8247"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>contents</TT></STRONG>
- : <A HREF="node7.html#8249"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>context</TT></STRONG>
- : <A HREF="node7.html#8251"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node7.html#8235"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><SPAN CLASS="textbf">Control</SPAN></STRONG>
- : <A HREF="node4.html#874"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>copy</TT></STRONG>
- : <A HREF="node7.html#4714"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
- | <A HREF="node7.html#8253"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>create_ws</TT></STRONG>
- : <A HREF="node7.html#4371"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>current</TT></STRONG>
- : <A HREF="node7.html#4415"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4638"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
- | <A HREF="node7.html#7129"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>current_scr</TT></STRONG>
- : <A HREF="node7.html#4685"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN></A>
-<DD><STRONG><TT>cut</TT></STRONG>
- : <A HREF="node7.html#8255"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>de</TT></STRONG><DL>
-<DD><STRONG><TT>defstyle</TT></STRONG> : <A HREF="node7.html#9672"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>defstyle_rootwin</TT></STRONG> : <A HREF="node7.html#9674"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>reset</TT></STRONG> : <A HREF="node7.html#9676"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>substyle</TT></STRONG> : <A HREF="node7.html#9678"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-</DL>
-<DD><STRONG><TT>dec_index</TT></STRONG>
- : <A HREF="node7.html#4590"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>defbindings</TT></STRONG>
- : <A HREF="node7.html#4373"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defcmd</TT></STRONG>
- : <A HREF="node7.html#8172"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>defctxmenu</TT></STRONG>
- : <A HREF="node7.html#4375"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>deflayout</TT></STRONG>
- : <A HREF="node7.html#4377"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#879"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><TT>defmenu</TT></STRONG>
- : <A HREF="node4.html#1185"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4379"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defshortening</TT></STRONG>
- : <A HREF="node7.html#4417"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defstyle</TT></STRONG>
- : <A HREF="node7.html#9673"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>defstyle_rootwin</TT></STRONG>
- : <A HREF="node7.html#9675"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>defwinprop</TT></STRONG>
- : <A HREF="node7.html#4381"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>delete</TT></STRONG>
- : <A HREF="node7.html#8257"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>detach</TT></STRONG>
- : <A HREF="node7.html#4419"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>dir</TT></STRONG>
- : <A HREF="node7.html#7137"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+ : <A HREF="node4.html#1198"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>drawing engine</STRONG>
- : <A HREF="node5.html#1709"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>eol</TT></STRONG>
- : <A HREF="node7.html#8259"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node5.html#1888"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>ETCDIR</TT></STRONG>
- : <A HREF="node4.html#591"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>exec</TT></STRONG>
- : <A HREF="node7.html#4421"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>exec_on</TT></STRONG>
- : <A HREF="node7.html#4383"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>export</TT></STRONG>
- : <A HREF="node7.html#4699"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN></A>
-<DD><STRONG><TT>farthest</TT></STRONG>
- : <A HREF="node7.html#7148"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>find_manager</TT></STRONG>
- : <A HREF="node7.html#4393"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>find_screen_id</TT></STRONG>
- : <A HREF="node7.html#4423"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>finish</TT></STRONG>
- : <A HREF="node7.html#4625"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
- | <A HREF="node7.html#8261"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
- | <A HREF="node7.html#9136"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>flip</TT></STRONG>
- : <A HREF="node7.html#7139"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>flip_at</TT></STRONG>
- : <A HREF="node7.html#7144"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#583"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>float</TT></STRONG>
- : <A HREF="node4.html#1439"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>focushistory_i</TT></STRONG>
- : <A HREF="node7.html#4425"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>forward</TT></STRONG>
- : <A HREF="node7.html#8263"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node4.html#1452"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><TT>frame_managed_changed_hook</TT></STRONG>
- : <A HREF="node7.html#9881"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8236"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><TT>fullscreen</TT></STRONG>
- : <A HREF="node4.html#1440"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>geom</TT></STRONG>
- : <A HREF="node7.html#4627"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
- | <A HREF="node7.html#4640"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
- | <A HREF="node7.html#7120"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get</TT></STRONG>
- : <A HREF="node7.html#4427"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#7111"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
- | <A HREF="node7.html#8176"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#9127"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
- | <A HREF="node7.html#9348"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_configuration</TT></STRONG>
- : <A HREF="node7.html#4642"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>get_dir_for</TT></STRONG>
- : <A HREF="node7.html#4395"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_ident</TT></STRONG>
- : <A HREF="node7.html#4534"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_index</TT></STRONG>
- : <A HREF="node7.html#4592"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>get_paths</TT></STRONG>
- : <A HREF="node7.html#4429"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_savefile</TT></STRONG>
- : <A HREF="node7.html#4387"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_stdisp</TT></STRONG>
- : <A HREF="node7.html#4594"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>get_template_table</TT></STRONG>
- : <A HREF="node7.html#9552"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getbindings</TT></STRONG>
- : <A HREF="node7.html#4397"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getctxmenu</TT></STRONG>
- : <A HREF="node7.html#4399"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getlayout</TT></STRONG>
- : <A HREF="node7.html#4401"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getmenu</TT></STRONG>
- : <A HREF="node7.html#4403"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getwinprop</TT></STRONG>
- : <A HREF="node7.html#4405"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto</TT></STRONG>
- : <A HREF="node7.html#4644"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>goto_activity</TT></STRONG>
- : <A HREF="node7.html#4431"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_first</TT></STRONG>
- : <A HREF="node7.html#4433"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_next</TT></STRONG>
- : <A HREF="node7.html#4435"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_next_screen</TT></STRONG>
- : <A HREF="node7.html#4437"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_nth_screen</TT></STRONG>
- : <A HREF="node7.html#4439"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_prev_screen</TT></STRONG>
- : <A HREF="node7.html#4441"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_previous</TT></STRONG>
- : <A HREF="node7.html#4443"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>gr</TT></STRONG><DL>
-<DD><STRONG><TT>read_config</TT></STRONG> : <A HREF="node7.html#4701"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-<DD><STRONG><TT>refresh</TT></STRONG> : <A HREF="node7.html#4703"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-<DD><STRONG><TT>select_engine</TT></STRONG> : <A HREF="node7.html#4705"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-</DL>
-<DD><STRONG><TT>grabmenu</TT></STRONG>
- : <A HREF="node7.html#9123"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>groupleader_of</TT></STRONG>
- : <A HREF="node7.html#4646"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>history_clear</TT></STRONG>
- : <A HREF="node7.html#8178"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_get</TT></STRONG>
- : <A HREF="node7.html#8180"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_next</TT></STRONG>
- : <A HREF="node7.html#8265"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>history_prev</TT></STRONG>
- : <A HREF="node7.html#8267"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>history_push</TT></STRONG>
- : <A HREF="node7.html#8182"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_search</TT></STRONG>
- : <A HREF="node7.html#8184"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_table</TT></STRONG>
- : <A HREF="node7.html#8186"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>icat</TT></STRONG>
- : <A HREF="node7.html#4716"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>id</TT></STRONG>
- : <A HREF="node7.html#4688"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
+ : <A HREF="node4.html#1453"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><TT>ignore_resizeinc</TT></STRONG>
- : <A HREF="node4.html#1457"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node4.html#1458"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1470"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ | <A HREF="node4.html#1471"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>ignore_cfgrq</TT></STRONG>
- : <A HREF="node4.html#1441"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#1454"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><TT>ignore_max_size</TT></STRONG>
- : <A HREF="node4.html#1455"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1468"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>ignore_min_size</TT></STRONG>
- : <A HREF="node4.html#1456"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1469"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>ignore_net_active_window</TT></STRONG>
- : <A HREF="node4.html#1442"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>inc_index</TT></STRONG>
- : <A HREF="node7.html#4596"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>insstr</TT></STRONG>
- : <A HREF="node7.html#8269"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node4.html#1455"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><TT>instance</TT></STRONG><DL>
-<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1462"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>ioncore</TT></STRONG><DL>
-<DD><STRONG><TT>aboutmsg</TT></STRONG> : <A HREF="node7.html#4406"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>activity_first</TT></STRONG> : <A HREF="node7.html#4408"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>activity_i</TT></STRONG> : <A HREF="node7.html#4410"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>bdoc</TT></STRONG> : <A HREF="node7.html#4364"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>chdir_for</TT></STRONG> : <A HREF="node7.html#4366"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>clientwin_i</TT></STRONG> : <A HREF="node7.html#4412"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>compile_cmd</TT></STRONG> : <A HREF="node7.html#4368"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>create_ws</TT></STRONG> : <A HREF="node7.html#4370"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>current</TT></STRONG> : <A HREF="node7.html#4414"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defbindings</TT></STRONG> : <A HREF="node7.html#4372"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defctxmenu</TT></STRONG> : <A HREF="node7.html#4374"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>deflayout</TT></STRONG> : <A HREF="node7.html#4376"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defmenu</TT></STRONG> : <A HREF="node7.html#4378"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defshortening</TT></STRONG> : <A HREF="node7.html#4416"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defwinprop</TT></STRONG> : <A HREF="node7.html#4380"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>detach</TT></STRONG> : <A HREF="node7.html#4418"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>exec</TT></STRONG> : <A HREF="node7.html#4420"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>exec_on</TT></STRONG> : <A HREF="node7.html#4382"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>find_manager</TT></STRONG> : <A HREF="node7.html#4392"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>find_screen_id</TT></STRONG> : <A HREF="node7.html#4422"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>focushistory_i</TT></STRONG> : <A HREF="node7.html#4424"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#4426"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_dir_for</TT></STRONG> : <A HREF="node7.html#4394"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_paths</TT></STRONG> : <A HREF="node7.html#4428"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get_savefile</TT></STRONG> : <A HREF="node7.html#4386"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getbindings</TT></STRONG> : <A HREF="node7.html#4396"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getctxmenu</TT></STRONG> : <A HREF="node7.html#4398"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getlayout</TT></STRONG> : <A HREF="node7.html#4400"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getmenu</TT></STRONG> : <A HREF="node7.html#4402"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>getwinprop</TT></STRONG> : <A HREF="node7.html#4404"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_activity</TT></STRONG> : <A HREF="node7.html#4430"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_first</TT></STRONG> : <A HREF="node7.html#4432"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_next</TT></STRONG> : <A HREF="node7.html#4434"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_next_screen</TT></STRONG> : <A HREF="node7.html#4436"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_nth_screen</TT></STRONG> : <A HREF="node7.html#4438"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_prev_screen</TT></STRONG> : <A HREF="node7.html#4440"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>goto_previous</TT></STRONG> : <A HREF="node7.html#4442"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>is_i18n</TT></STRONG> : <A HREF="node7.html#4444"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>kpress</TT></STRONG> : <A HREF="node7.html#4508"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>kpress_wait</TT></STRONG> : <A HREF="node7.html#4510"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>load_module</TT></STRONG> : <A HREF="node7.html#4446"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>lookup_clientwin</TT></STRONG> : <A HREF="node7.html#4448"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>lookup_region</TT></STRONG> : <A HREF="node7.html#4450"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>lookup_script</TT></STRONG> : <A HREF="node7.html#4388"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>match_winprop_name</TT></STRONG> : <A HREF="node7.html#4512"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mclick</TT></STRONG> : <A HREF="node7.html#4514"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mdblclick</TT></STRONG> : <A HREF="node7.html#4516"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mdrag</TT></STRONG> : <A HREF="node7.html#4518"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>menuentry</TT></STRONG> : <A HREF="node7.html#4520"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mpress</TT></STRONG> : <A HREF="node7.html#4522"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>navi_first</TT></STRONG> : <A HREF="node7.html#4452"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>navi_next</TT></STRONG> : <A HREF="node7.html#4454"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>popen_bgread</TT></STRONG> : <A HREF="node7.html#4456"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>progname</TT></STRONG> : <A HREF="node7.html#4458"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>read_savefile</TT></STRONG> : <A HREF="node7.html#4384"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>refresh_stylelist</TT></STRONG> : <A HREF="node7.html#4524"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>region_i</TT></STRONG> : <A HREF="node7.html#4460"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>request_selection</TT></STRONG> : <A HREF="node7.html#4462"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>resign</TT></STRONG> : <A HREF="node7.html#4464"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>restart</TT></STRONG> : <A HREF="node7.html#4466"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>restart_other</TT></STRONG> : <A HREF="node7.html#4468"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#4470"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_paths</TT></STRONG> : <A HREF="node7.html#4472"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_selection</TT></STRONG> : <A HREF="node7.html#4474"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>shutdown</TT></STRONG> : <A HREF="node7.html#4476"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>snapshot</TT></STRONG> : <A HREF="node7.html#4478"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>submap</TT></STRONG> : <A HREF="node7.html#4526"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>submenu</TT></STRONG> : <A HREF="node7.html#4528"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_attach</TT></STRONG> : <A HREF="node7.html#4530"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_clear</TT></STRONG> : <A HREF="node7.html#4480"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_first</TT></STRONG> : <A HREF="node7.html#4482"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_i</TT></STRONG> : <A HREF="node7.html#4484"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>TR</TT></STRONG> : <A HREF="node7.html#4362"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>unsqueeze</TT></STRONG> : <A HREF="node7.html#4486"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>version</TT></STRONG> : <A HREF="node7.html#4488"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>warn</TT></STRONG> : <A HREF="node7.html#4490"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>warn_traced</TT></STRONG> : <A HREF="node7.html#4492"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>write_savefile</TT></STRONG> : <A HREF="node7.html#4390"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_change_property</TT></STRONG> : <A HREF="node7.html#4494"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_delete_property</TT></STRONG> : <A HREF="node7.html#4496"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_atom_name</TT></STRONG> : <A HREF="node7.html#4498"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_text_property</TT></STRONG> : <A HREF="node7.html#4500"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_window_property</TT></STRONG> : <A HREF="node7.html#4502"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_intern_atom</TT></STRONG> : <A HREF="node7.html#4504"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_set_text_property</TT></STRONG> : <A HREF="node7.html#4506"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1475"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
</DL>
<DD><STRONG><TT>ioncore_deinit_hook</TT></STRONG>
- : <A HREF="node7.html#9883"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8238"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><TT>ioncore_post_layout_setup_hook</TT></STRONG>
- : <A HREF="node7.html#9884"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8239"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><TT>ioncore_sigchld_hook</TT></STRONG>
- : <A HREF="node7.html#9882"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8237"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><TT>ioncore_snapshot_hook</TT></STRONG>
- : <A HREF="node7.html#9885"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_active</TT></STRONG>
- : <A HREF="node7.html#4648"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_activity</TT></STRONG>
- : <A HREF="node7.html#4650"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_fullscreen</TT></STRONG>
- : <A HREF="node7.html#4570"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>is_hidden</TT></STRONG>
- : <A HREF="node7.html#4598"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>is_histcompl</TT></STRONG>
- : <A HREF="node7.html#8271"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>is_i18n</TT></STRONG>
- : <A HREF="node7.html#4445"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>is_mapped</TT></STRONG>
- : <A HREF="node7.html#4652"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_shaded</TT></STRONG>
- : <A HREF="node7.html#4545"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>is_systray_extl</TT></STRONG>
- : <A HREF="node7.html#9554"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>is_tagged</TT></STRONG>
- : <A HREF="node7.html#4654"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>join</TT></STRONG>
- : <A HREF="node7.html#4718"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
+ : <A HREF="node7.html#8240"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>ioncore_submap_ungrab_hook</TT></STRONG>
+ : <A HREF="node7.html#8241"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+<DD><STRONG><TT>is_dockapp</TT></STRONG><DL>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1478"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+</DL>
+<DD><STRONG><TT>is_transient</TT></STRONG><DL>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1477"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+</DL>
<DD><STRONG><TT>jumpto</TT></STRONG>
- : <A HREF="node4.html#1443"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#1456"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><SPAN CLASS="textit">keysymdef.h</SPAN></STRONG>
- : <A HREF="node4.html#872"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>kill</TT></STRONG>
- : <A HREF="node7.html#4536"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>kill_line</TT></STRONG>
- : <A HREF="node7.html#8273"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_to_bol</TT></STRONG>
- : <A HREF="node7.html#8275"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_to_eol</TT></STRONG>
- : <A HREF="node7.html#8277"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_word</TT></STRONG>
- : <A HREF="node7.html#8279"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kpress</TT></STRONG>
- : <A HREF="node7.html#4509"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>kpress_wait</TT></STRONG>
- : <A HREF="node7.html#4511"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>load_module</TT></STRONG>
- : <A HREF="node7.html#4447"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><SPAN CLASS="textbf">Lock</SPAN></STRONG>
: <A HREF="node4.html#877"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>lookup_clientwin</TT></STRONG>
- : <A HREF="node7.html#4449"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>lookup_region</TT></STRONG>
- : <A HREF="node7.html#4451"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>lookup_script</TT></STRONG>
- : <A HREF="node7.html#4389"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>managed_i</TT></STRONG>
- : <A HREF="node7.html#4572"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#4600"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
- | <A HREF="node7.html#7150"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>manager</TT></STRONG>
- : <A HREF="node3.html#390"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4656"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>map</TT></STRONG>
- : <A HREF="node7.html#4720"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>mark</TT></STRONG>
- : <A HREF="node7.html#8281"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>match_winprop_name</TT></STRONG>
- : <A HREF="node7.html#4513"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><SPAN CLASS="textbf">Lock</SPAN></STRONG>
+ : <A HREF="node4.html#882"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG>manager</STRONG>
+ : <A HREF="node3.html#382"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>max_size</TT></STRONG>
- : <A HREF="node4.html#1451"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>maximize_horiz</TT></STRONG>
- : <A HREF="node7.html#4547"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>maximize_vert</TT></STRONG>
- : <A HREF="node7.html#4549"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>mclick</TT></STRONG>
- : <A HREF="node7.html#4515"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mdblclick</TT></STRONG>
- : <A HREF="node7.html#4517"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mdrag</TT></STRONG>
- : <A HREF="node7.html#4519"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>menu</TT></STRONG>
- : <A HREF="node7.html#9125"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+ : <A HREF="node4.html#1464"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>menuentry</TT></STRONG>
- : <A HREF="node4.html#1186"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4521"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1199"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>menus</STRONG>
- : <A HREF="node4.html#1128"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>message</TT></STRONG>
- : <A HREF="node7.html#8174"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#1144"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>min_size</TT></STRONG>
- : <A HREF="node4.html#1452"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mkbottom</TT></STRONG>
- : <A HREF="node7.html#7113"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>mod_dock</TT></STRONG><DL>
-<DD><STRONG><TT>set_floating_shown_on</TT></STRONG> : <A HREF="node7.html#9342"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-</DL>
-<DD><STRONG><TT>mod_menu</TT></STRONG><DL>
-<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#9126"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>grabmenu</TT></STRONG> : <A HREF="node7.html#9122"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>menu</TT></STRONG> : <A HREF="node7.html#9124"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>pmenu</TT></STRONG> : <A HREF="node7.html#9130"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#9128"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-</DL>
-<DD><STRONG><TT>mod_query</TT></STRONG><DL>
-<DD><STRONG><TT>defcmd</TT></STRONG> : <A HREF="node7.html#8171"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#8175"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_clear</TT></STRONG> : <A HREF="node7.html#8177"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_get</TT></STRONG> : <A HREF="node7.html#8179"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_push</TT></STRONG> : <A HREF="node7.html#8181"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_search</TT></STRONG> : <A HREF="node7.html#8183"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>history_table</TT></STRONG> : <A HREF="node7.html#8185"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>message</TT></STRONG> : <A HREF="node7.html#8173"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>popen_completions</TT></STRONG> : <A HREF="node7.html#8189"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query</TT></STRONG> : <A HREF="node7.html#8191"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_attachclient</TT></STRONG> : <A HREF="node7.html#8193"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_editfile</TT></STRONG> : <A HREF="node7.html#8195"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_exec</TT></STRONG> : <A HREF="node7.html#8197"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_gotoclient</TT></STRONG> : <A HREF="node7.html#8199"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_lua</TT></STRONG> : <A HREF="node7.html#8201"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_man</TT></STRONG> : <A HREF="node7.html#8203"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_menu</TT></STRONG> : <A HREF="node7.html#8205"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_renameframe</TT></STRONG> : <A HREF="node7.html#8207"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_renameworkspace</TT></STRONG> : <A HREF="node7.html#8209"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_restart</TT></STRONG> : <A HREF="node7.html#8211"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_runfile</TT></STRONG> : <A HREF="node7.html#8213"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_shutdown</TT></STRONG> : <A HREF="node7.html#8215"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_ssh</TT></STRONG> : <A HREF="node7.html#8217"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_workspace</TT></STRONG> : <A HREF="node7.html#8220"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_yesno</TT></STRONG> : <A HREF="node7.html#8222"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#8187"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>show_about_ion</TT></STRONG> : <A HREF="node7.html#8224"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>show_tree</TT></STRONG> : <A HREF="node7.html#8226"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>warn</TT></STRONG> : <A HREF="node7.html#8228"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-</DL>
-<DD><STRONG><TT>mod_sp</TT></STRONG><DL>
-<DD><STRONG><TT>set_shown</TT></STRONG> : <A HREF="node7.html#9451"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>set_shown_on</TT></STRONG> : <A HREF="node7.html#9453"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-</DL>
-<DD><STRONG><TT>mod_statusbar</TT></STRONG><DL>
-<DD><STRONG><TT>statusbars</TT></STRONG> : <A HREF="node7.html#9548"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-</DL>
-<DD><STRONG><TT>mod_tiling</TT></STRONG><DL>
-<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#7110"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>mkbottom</TT></STRONG> : <A HREF="node7.html#7112"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#7114"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>untile</TT></STRONG> : <A HREF="node7.html#7116"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>mode</TT></STRONG>
- : <A HREF="node7.html#4551"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node4.html#1465"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><SPAN CLASS="textbf">ModN</SPAN></STRONG>
- : <A HREF="node4.html#875"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>move</TT></STRONG>
- : <A HREF="node7.html#4629"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>mpress</TT></STRONG>
- : <A HREF="node7.html#4523"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>mx_count</TT></STRONG>
- : <A HREF="node7.html#4602"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_current</TT></STRONG>
- : <A HREF="node7.html#4604"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_i</TT></STRONG>
- : <A HREF="node7.html#4606"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_nth</TT></STRONG>
- : <A HREF="node7.html#4608"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>name</TT></STRONG>
- : <A HREF="node7.html#4658"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>navi_first</TT></STRONG>
- : <A HREF="node7.html#4453"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>navi_next</TT></STRONG>
- : <A HREF="node7.html#4455"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#880"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG><TT>name</TT></STRONG><DL>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1476"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+</DL>
<DD><STRONG><TT>new_group</TT></STRONG>
- : <A HREF="node4.html#1444"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>next_completion</TT></STRONG>
- : <A HREF="node7.html#8283"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>nextto</TT></STRONG>
- : <A HREF="node7.html#7152"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>node_of</TT></STRONG>
- : <A HREF="node7.html#7154"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>nudge</TT></STRONG>
- : <A HREF="node7.html#4538"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1457"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><SPAN CLASS="textbf">NumLock</SPAN></STRONG>
- : <A HREF="node4.html#880"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#885"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG>Obj</STRONG>
- : <A HREF="node3.html#418"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node3.html#410"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>oneshot</TT></STRONG>
- : <A HREF="node4.html#1445"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>p_move</TT></STRONG>
- : <A HREF="node7.html#4693"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
-<DD><STRONG><TT>p_resize</TT></STRONG>
- : <A HREF="node7.html#4695"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
-<DD><STRONG><TT>p_switch_tab</TT></STRONG>
- : <A HREF="node7.html#4553"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>p_tabdrag</TT></STRONG>
- : <A HREF="node7.html#4555"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>parent</TT></STRONG>
- : <A HREF="node3.html#375"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4660"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
- | <A HREF="node7.html#7122"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>paste</TT></STRONG>
- : <A HREF="node7.html#8285"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>pmenu</TT></STRONG>
- : <A HREF="node7.html#9131"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>point</TT></STRONG>
- : <A HREF="node7.html#8287"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>popen_bgread</TT></STRONG>
- : <A HREF="node7.html#4457"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>popen_completions</TT></STRONG>
- : <A HREF="node7.html#8190"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#1458"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG>parent</STRONG>
+ : <A HREF="node3.html#367"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>PREFIX</TT></STRONG>
- : <A HREF="node4.html#590"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>prev_completion</TT></STRONG>
- : <A HREF="node7.html#8289"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>progname</TT></STRONG>
- : <A HREF="node7.html#4459"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>query</TT></STRONG>
- : <A HREF="node7.html#8192"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_attachclient</TT></STRONG>
- : <A HREF="node7.html#8194"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_editfile</TT></STRONG>
- : <A HREF="node7.html#8196"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_exec</TT></STRONG>
- : <A HREF="node7.html#8198"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_gotoclient</TT></STRONG>
- : <A HREF="node7.html#8200"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_lua</TT></STRONG>
- : <A HREF="node7.html#8202"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_man</TT></STRONG>
- : <A HREF="node7.html#8204"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_menu</TT></STRONG>
- : <A HREF="node7.html#8206"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_renameframe</TT></STRONG>
- : <A HREF="node7.html#8208"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_renameworkspace</TT></STRONG>
- : <A HREF="node7.html#8210"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_restart</TT></STRONG>
- : <A HREF="node7.html#8212"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_runfile</TT></STRONG>
- : <A HREF="node7.html#8214"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_shutdown</TT></STRONG>
- : <A HREF="node7.html#8216"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_ssh</TT></STRONG>
- : <A HREF="node7.html#8218"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_workspace</TT></STRONG>
- : <A HREF="node7.html#8221"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>query_yesno</TT></STRONG>
- : <A HREF="node7.html#8223"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>quote_next</TT></STRONG>
- : <A HREF="node7.html#4540"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>read_config</TT></STRONG>
- : <A HREF="node7.html#4702"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-<DD><STRONG><TT>read_savefile</TT></STRONG>
- : <A HREF="node7.html#4385"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>refresh</TT></STRONG>
- : <A HREF="node7.html#4704"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-<DD><STRONG><TT>refresh_stylelist</TT></STRONG>
- : <A HREF="node7.html#4525"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>reg</TT></STRONG>
- : <A HREF="node7.html#7132"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#582"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>region_do_warp_alt</TT></STRONG>
- : <A HREF="node7.html#9887"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>region_i</TT></STRONG>
- : <A HREF="node7.html#4461"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node7.html#8243"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><TT>region_notify_hook</TT></STRONG>
- : <A HREF="node7.html#9889"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>request_selection</TT></STRONG>
- : <A HREF="node7.html#4463"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>reset</TT></STRONG>
- : <A HREF="node7.html#9677"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>resign</TT></STRONG>
- : <A HREF="node7.html#4465"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>resize</TT></STRONG>
- : <A HREF="node7.html#4631"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
- | <A HREF="node7.html#9350"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>restart</TT></STRONG>
- : <A HREF="node7.html#4467"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>restart_other</TT></STRONG>
- : <A HREF="node7.html#4469"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node7.html#8245"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><TT>role</TT></STRONG><DL>
-<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1461"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
+<DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1474"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
</DL>
<DD><STRONG>root window</STRONG>
- : <A HREF="node3.html#336"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>rootwin_of</TT></STRONG>
- : <A HREF="node7.html#4662"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqclose</TT></STRONG>
- : <A HREF="node7.html#4664"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqclose_propagate</TT></STRONG>
- : <A HREF="node7.html#4666"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqgeom</TT></STRONG>
- : <A HREF="node7.html#4633"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
- | <A HREF="node7.html#4668"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
- | <A HREF="node7.html#7124"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>rqorder</TT></STRONG>
- : <A HREF="node7.html#4670"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node3.html#331"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>screen</STRONG><DL>
-<DD><STRONG>physical</STRONG> : <A HREF="node3.html#338"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>X</STRONG> : <A HREF="node3.html#337"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>physical</STRONG> : <A HREF="node3.html#334"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>X</STRONG> : <A HREF="node3.html#332"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
</DL>
<DD><STRONG><TT>screen_managed_changed_hook</TT></STRONG>
- : <A HREF="node7.html#9888"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>screen_of</TT></STRONG>
- : <A HREF="node7.html#4672"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>scrolldown</TT></STRONG>
- : <A HREF="node7.html#8304"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node7.html#8244"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG><SPAN CLASS="textbf">ScrollLock</SPAN></STRONG>
- : <A HREF="node4.html#881"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>scrollup</TT></STRONG>
- : <A HREF="node7.html#8306"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>select_engine</TT></STRONG>
- : <A HREF="node7.html#4706"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN></A>
-<DD><STRONG><TT>select_next</TT></STRONG>
- : <A HREF="node7.html#9138"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>select_nth</TT></STRONG>
- : <A HREF="node7.html#9140"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>select_prev</TT></STRONG>
- : <A HREF="node7.html#9142"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG>
- : <A HREF="node7.html#4471"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#7115"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
- | <A HREF="node7.html#8188"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
- | <A HREF="node7.html#9129"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
- | <A HREF="node7.html#9352"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_activity</TT></STRONG>
- : <A HREF="node7.html#4674"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_bottom</TT></STRONG>
- : <A HREF="node7.html#4574"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>set_completions</TT></STRONG>
- : <A HREF="node7.html#8232"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_context</TT></STRONG>
- : <A HREF="node7.html#8291"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_floating</TT></STRONG>
- : <A HREF="node7.html#7158"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>set_floating_at</TT></STRONG>
- : <A HREF="node7.html#7156"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>set_floating_shown_on</TT></STRONG>
- : <A HREF="node7.html#9343"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>set_fullscreen</TT></STRONG>
- : <A HREF="node7.html#4576"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>set_hidden</TT></STRONG>
- : <A HREF="node7.html#4610"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_index</TT></STRONG>
- : <A HREF="node7.html#4612"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_managed_offset</TT></STRONG>
- : <A HREF="node7.html#4690"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
-<DD><STRONG><TT>set_mark</TT></STRONG>
- : <A HREF="node7.html#8293"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_mode</TT></STRONG>
- : <A HREF="node7.html#4557"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_name</TT></STRONG>
- : <A HREF="node7.html#4676"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_name_exact</TT></STRONG>
- : <A HREF="node7.html#4678"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_numbers</TT></STRONG>
- : <A HREF="node7.html#4559"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_paths</TT></STRONG>
- : <A HREF="node7.html#4473"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_selection</TT></STRONG>
- : <A HREF="node7.html#4475"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_shaded</TT></STRONG>
- : <A HREF="node7.html#4561"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_shown</TT></STRONG>
- : <A HREF="node7.html#9452"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>set_shown_on</TT></STRONG>
- : <A HREF="node7.html#9454"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>set_stdisp</TT></STRONG>
- : <A HREF="node7.html#4614"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_systray</TT></STRONG>
- : <A HREF="node7.html#9556"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_tagged</TT></STRONG>
- : <A HREF="node7.html#4680"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_template</TT></STRONG>
- : <A HREF="node7.html#9558"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_template_table</TT></STRONG>
- : <A HREF="node7.html#9560"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_text</TT></STRONG>
- : <A HREF="node7.html#4583"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-<DD><STRONG><TT>shell_safe</TT></STRONG>
- : <A HREF="node7.html#4709"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN></A>
+ : <A HREF="node4.html#886"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><SPAN CLASS="textbf">Shift</SPAN></STRONG>
- : <A HREF="node4.html#873"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>show_about_ion</TT></STRONG>
- : <A HREF="node7.html#8225"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>show_tree</TT></STRONG>
- : <A HREF="node7.html#8227"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>shutdown</TT></STRONG>
- : <A HREF="node7.html#4477"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>size_hints</TT></STRONG>
- : <A HREF="node7.html#4682"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>skip_word</TT></STRONG>
- : <A HREF="node7.html#8295"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>snapshot</TT></STRONG>
- : <A HREF="node7.html#4479"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>split</TT></STRONG>
- : <A HREF="node7.html#7160"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_at</TT></STRONG>
- : <A HREF="node7.html#7162"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_top</TT></STRONG>
- : <A HREF="node7.html#7164"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_tree</TT></STRONG>
- : <A HREF="node7.html#7166"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#878"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><TT>statusbar</TT></STRONG>
- : <A HREF="node4.html#1446"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>statusbars</TT></STRONG>
- : <A HREF="node7.html#9549"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>string</TT></STRONG><DL>
-<DD><STRONG><TT>shell_safe</TT></STRONG> : <A HREF="node7.html#4708"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN></A>
-</DL>
+ : <A HREF="node4.html#1459"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG>style</STRONG>
- : <A HREF="node5.html#1708"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>submap</TT></STRONG>
- : <A HREF="node7.html#4527"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node5.html#1887"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>submenu</TT></STRONG>
- : <A HREF="node4.html#1187"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4529"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>substyle</TT></STRONG>
- : <A HREF="node5.html#1720"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#9679"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>switch_next</TT></STRONG>
- : <A HREF="node7.html#4616"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>switch_nth</TT></STRONG>
- : <A HREF="node7.html#4618"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>switch_prev</TT></STRONG>
- : <A HREF="node7.html#4620"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
+ : <A HREF="node4.html#1200"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>substyle</STRONG>
+ : <A HREF="node5.html#1900"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>switchto</TT></STRONG>
- : <A HREF="node4.html#1447"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#1460"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><SPAN CLASS="textit">system.mk</SPAN></STRONG>
- : <A HREF="node4.html#592"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>table</TT></STRONG><DL>
-<DD><STRONG><TT>append</TT></STRONG> : <A HREF="node7.html#4711"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>copy</TT></STRONG> : <A HREF="node7.html#4713"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>icat</TT></STRONG> : <A HREF="node7.html#4715"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>join</TT></STRONG> : <A HREF="node7.html#4717"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-<DD><STRONG><TT>map</TT></STRONG> : <A HREF="node7.html#4719"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN></A>
-</DL>
-<DD><STRONG><TT>tagged_attach</TT></STRONG>
- : <A HREF="node7.html#4531"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_clear</TT></STRONG>
- : <A HREF="node7.html#4481"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_first</TT></STRONG>
- : <A HREF="node7.html#4483"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>tagged_i</TT></STRONG>
- : <A HREF="node7.html#4485"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#584"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>target</TT></STRONG>
- : <A HREF="node4.html#1448"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#1461"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><TT>tiling_placement_alt</TT></STRONG>
- : <A HREF="node7.html#9886"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>tl</TT></STRONG>
- : <A HREF="node7.html#7141"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>TR</TT></STRONG>
- : <A HREF="node7.html#4363"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node7.html#8242"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
<DD><STRONG>transient</STRONG>
- : <A HREF="node4.html#1415"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#1432"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
<DD><STRONG><TT>transient_mode</TT></STRONG>
- : <A HREF="node4.html#1449"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#1462"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><TT>transparent</TT></STRONG>
- : <A HREF="node4.html#1450"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>transpose</TT></STRONG>
- : <A HREF="node7.html#7126"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>transpose_at</TT></STRONG>
- : <A HREF="node7.html#7146"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>transpose_chars</TT></STRONG>
- : <A HREF="node7.html#8297"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>transpose_words</TT></STRONG>
- : <A HREF="node7.html#8299"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>typeahead_clear</TT></STRONG>
- : <A HREF="node7.html#9144"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>unsplit_at</TT></STRONG>
- : <A HREF="node7.html#7168"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>unsqueeze</TT></STRONG>
- : <A HREF="node7.html#4487"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>untile</TT></STRONG>
- : <A HREF="node7.html#7117"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>update</TT></STRONG>
- : <A HREF="node7.html#9562"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#1463"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG><TT>userpos</TT></STRONG>
- : <A HREF="node4.html#1459"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>version</TT></STRONG>
- : <A HREF="node7.html#4489"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>warn</TT></STRONG>
- : <A HREF="node7.html#4491"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#8229"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>warn_traced</TT></STRONG>
- : <A HREF="node7.html#4493"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>WClientWin</TT></STRONG>
- : <A HREF="node3.html#420"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>get_ident</TT></STRONG> : <A HREF="node7.html#4533"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>kill</TT></STRONG> : <A HREF="node7.html#4535"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>nudge</TT></STRONG> : <A HREF="node7.html#4537"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>quote_next</TT></STRONG> : <A HREF="node7.html#4539"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>xid</TT></STRONG> : <A HREF="node7.html#4541"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG><TT>WComplProxy</TT></STRONG><DL>
-<DD><STRONG><TT>set_completions</TT></STRONG> : <A HREF="node7.html#8231"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG><TT>WDock</TT></STRONG><DL>
-<DD><STRONG><TT>attach</TT></STRONG> : <A HREF="node7.html#9345"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>get</TT></STRONG> : <A HREF="node7.html#9347"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>resize</TT></STRONG> : <A HREF="node7.html#9349"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set</TT></STRONG> : <A HREF="node7.html#9351"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG><TT>WEdln</TT></STRONG>
- : <A HREF="node3.html#433"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>back</TT></STRONG> : <A HREF="node7.html#8234"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>backspace</TT></STRONG> : <A HREF="node7.html#8236"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bkill_word</TT></STRONG> : <A HREF="node7.html#8238"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bol</TT></STRONG> : <A HREF="node7.html#8240"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>bskip_word</TT></STRONG> : <A HREF="node7.html#8242"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>clear_mark</TT></STRONG> : <A HREF="node7.html#8244"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>complete</TT></STRONG> : <A HREF="node7.html#8246"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>contents</TT></STRONG> : <A HREF="node7.html#8248"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>context</TT></STRONG> : <A HREF="node7.html#8250"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>copy</TT></STRONG> : <A HREF="node7.html#8252"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>cut</TT></STRONG> : <A HREF="node7.html#8254"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>delete</TT></STRONG> : <A HREF="node7.html#8256"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>eol</TT></STRONG> : <A HREF="node7.html#8258"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>finish</TT></STRONG> : <A HREF="node7.html#8260"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>forward</TT></STRONG> : <A HREF="node7.html#8262"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>history_next</TT></STRONG> : <A HREF="node7.html#8264"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>history_prev</TT></STRONG> : <A HREF="node7.html#8266"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>insstr</TT></STRONG> : <A HREF="node7.html#8268"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>is_histcompl</TT></STRONG> : <A HREF="node7.html#8270"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_line</TT></STRONG> : <A HREF="node7.html#8272"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_to_bol</TT></STRONG> : <A HREF="node7.html#8274"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_to_eol</TT></STRONG> : <A HREF="node7.html#8276"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>kill_word</TT></STRONG> : <A HREF="node7.html#8278"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>mark</TT></STRONG> : <A HREF="node7.html#8280"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>next_completion</TT></STRONG> : <A HREF="node7.html#8282"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>paste</TT></STRONG> : <A HREF="node7.html#8284"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>point</TT></STRONG> : <A HREF="node7.html#8286"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>prev_completion</TT></STRONG> : <A HREF="node7.html#8288"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_context</TT></STRONG> : <A HREF="node7.html#8290"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_mark</TT></STRONG> : <A HREF="node7.html#8292"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>skip_word</TT></STRONG> : <A HREF="node7.html#8294"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>transpose_chars</TT></STRONG> : <A HREF="node7.html#8296"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>transpose_words</TT></STRONG> : <A HREF="node7.html#8298"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>WFrame</TT></STRONG>
- : <A HREF="node3.html#424"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>is_shaded</TT></STRONG> : <A HREF="node7.html#4544"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>maximize_horiz</TT></STRONG> : <A HREF="node7.html#4546"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>maximize_vert</TT></STRONG> : <A HREF="node7.html#4548"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>mode</TT></STRONG> : <A HREF="node7.html#4550"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>p_switch_tab</TT></STRONG> : <A HREF="node7.html#4552"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>p_tabdrag</TT></STRONG> : <A HREF="node7.html#4554"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_mode</TT></STRONG> : <A HREF="node7.html#4556"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_numbers</TT></STRONG> : <A HREF="node7.html#4558"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>set_shaded</TT></STRONG> : <A HREF="node7.html#4560"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>WGroup</TT></STRONG>
+ : <A HREF="node4.html#1472"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WClientWin</STRONG>
+ : <A HREF="node3.html#412"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WEdln</STRONG>
: <A HREF="node3.html#425"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>attach</TT></STRONG> : <A HREF="node7.html#4563"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>attach_new</TT></STRONG> : <A HREF="node7.html#4565"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>bottom</TT></STRONG> : <A HREF="node7.html#4567"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>is_fullscreen</TT></STRONG> : <A HREF="node7.html#4569"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>managed_i</TT></STRONG> : <A HREF="node7.html#4571"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>set_bottom</TT></STRONG> : <A HREF="node7.html#4573"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>set_fullscreen</TT></STRONG> : <A HREF="node7.html#4575"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-</DL>
+<DD><STRONG>WFrame</STRONG>
+ : <A HREF="node3.html#416"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WGroup</STRONG>
+ : <A HREF="node3.html#417"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WGroupCW</STRONG>
- : <A HREF="node3.html#427"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>WGroupWS</TT></STRONG>
- : <A HREF="node3.html#426"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>attach_framed</TT></STRONG> : <A HREF="node7.html#4579"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-</DL>
-<DD><STRONG><TT>WInfoWin</TT></STRONG><DL>
-<DD><STRONG><TT>set_text</TT></STRONG> : <A HREF="node7.html#4582"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN></A>
-</DL>
+ : <A HREF="node3.html#419"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WGroupWS</STRONG>
+ : <A HREF="node3.html#418"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>Winprops</STRONG>
- : <A HREF="node4.html#1283"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>WInput</TT></STRONG>
- : <A HREF="node3.html#432"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>cancel</TT></STRONG> : <A HREF="node7.html#8301"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>scrolldown</TT></STRONG> : <A HREF="node7.html#8303"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-<DD><STRONG><TT>scrollup</TT></STRONG> : <A HREF="node7.html#8305"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-</DL>
-<DD><STRONG><TT>WMenu</TT></STRONG><DL>
-<DD><STRONG><TT>cancel</TT></STRONG> : <A HREF="node7.html#9133"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>finish</TT></STRONG> : <A HREF="node7.html#9135"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>select_next</TT></STRONG> : <A HREF="node7.html#9137"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>select_nth</TT></STRONG> : <A HREF="node7.html#9139"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>select_prev</TT></STRONG> : <A HREF="node7.html#9141"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>typeahead_clear</TT></STRONG> : <A HREF="node7.html#9143"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
+ : <A HREF="node4.html#1291"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+<DD><STRONG>WInput</STRONG>
+ : <A HREF="node3.html#424"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WMessage</STRONG>
- : <A HREF="node3.html#434"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>WMoveresMode</TT></STRONG><DL>
-<DD><STRONG><TT>cancel</TT></STRONG> : <A HREF="node7.html#4622"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>finish</TT></STRONG> : <A HREF="node7.html#4624"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>geom</TT></STRONG> : <A HREF="node7.html#4626"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>move</TT></STRONG> : <A HREF="node7.html#4628"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>resize</TT></STRONG> : <A HREF="node7.html#4630"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-<DD><STRONG><TT>rqgeom</TT></STRONG> : <A HREF="node7.html#4632"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN></A>
-</DL>
-<DD><STRONG><TT>WMPlex</TT></STRONG><DL>
-<DD><STRONG><TT>attach</TT></STRONG> : <A HREF="node7.html#4585"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>attach_new</TT></STRONG> : <A HREF="node7.html#4587"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>dec_index</TT></STRONG> : <A HREF="node7.html#4589"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>get_index</TT></STRONG> : <A HREF="node7.html#4591"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>get_stdisp</TT></STRONG> : <A HREF="node7.html#4593"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>inc_index</TT></STRONG> : <A HREF="node7.html#4595"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>is_hidden</TT></STRONG> : <A HREF="node7.html#4597"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>managed_i</TT></STRONG> : <A HREF="node7.html#4599"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_count</TT></STRONG> : <A HREF="node7.html#4601"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_current</TT></STRONG> : <A HREF="node7.html#4603"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_i</TT></STRONG> : <A HREF="node7.html#4605"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>mx_nth</TT></STRONG> : <A HREF="node7.html#4607"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_hidden</TT></STRONG> : <A HREF="node7.html#4609"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_index</TT></STRONG> : <A HREF="node7.html#4611"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>set_stdisp</TT></STRONG> : <A HREF="node7.html#4613"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>switch_next</TT></STRONG> : <A HREF="node7.html#4615"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>switch_nth</TT></STRONG> : <A HREF="node7.html#4617"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-<DD><STRONG><TT>switch_prev</TT></STRONG> : <A HREF="node7.html#4619"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN></A>
-</DL>
-<DD><STRONG><TT>WRegion</TT></STRONG>
- : <A HREF="node3.html#419"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>begin_kbresize</TT></STRONG> : <A HREF="node7.html#4635"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>current</TT></STRONG> : <A HREF="node7.html#4637"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>geom</TT></STRONG> : <A HREF="node7.html#4639"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>get_configuration</TT></STRONG> : <A HREF="node7.html#4641"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>goto</TT></STRONG> : <A HREF="node7.html#4643"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>groupleader_of</TT></STRONG> : <A HREF="node7.html#4645"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_active</TT></STRONG> : <A HREF="node7.html#4647"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_activity</TT></STRONG> : <A HREF="node7.html#4649"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_mapped</TT></STRONG> : <A HREF="node7.html#4651"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>is_tagged</TT></STRONG> : <A HREF="node7.html#4653"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>manager</TT></STRONG> : <A HREF="node7.html#4655"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>name</TT></STRONG> : <A HREF="node7.html#4657"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>parent</TT></STRONG> : <A HREF="node7.html#4659"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rootwin_of</TT></STRONG> : <A HREF="node7.html#4661"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqclose</TT></STRONG> : <A HREF="node7.html#4663"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqclose_propagate</TT></STRONG> : <A HREF="node7.html#4665"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqgeom</TT></STRONG> : <A HREF="node7.html#4667"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>rqorder</TT></STRONG> : <A HREF="node7.html#4669"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>screen_of</TT></STRONG> : <A HREF="node7.html#4671"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_activity</TT></STRONG> : <A HREF="node7.html#4673"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_name</TT></STRONG> : <A HREF="node7.html#4675"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_name_exact</TT></STRONG> : <A HREF="node7.html#4677"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>set_tagged</TT></STRONG> : <A HREF="node7.html#4679"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-<DD><STRONG><TT>size_hints</TT></STRONG> : <A HREF="node7.html#4681"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
-</DL>
-<DD><STRONG><TT>write_savefile</TT></STRONG>
- : <A HREF="node7.html#4391"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>WRootWin</TT></STRONG>
+ : <A HREF="node3.html#426"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WRegion</STRONG>
+ : <A HREF="node3.html#411"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WRootWin</STRONG>
+ : <A HREF="node3.html#415"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WScreen</STRONG>
+ : <A HREF="node3.html#414"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WSplit</STRONG>
: <A HREF="node3.html#422"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>current_scr</TT></STRONG> : <A HREF="node7.html#4684"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN></A>
-</DL>
-<DD><STRONG><TT>WScreen</TT></STRONG>
- : <A HREF="node3.html#423"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>id</TT></STRONG> : <A HREF="node7.html#4687"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
-<DD><STRONG><TT>set_managed_offset</TT></STRONG> : <A HREF="node7.html#4689"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN></A>
-</DL>
-<DD><STRONG><TT>WSplit</TT></STRONG>
- : <A HREF="node3.html#430"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>geom</TT></STRONG> : <A HREF="node7.html#7119"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>parent</TT></STRONG> : <A HREF="node7.html#7121"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>rqgeom</TT></STRONG> : <A HREF="node7.html#7123"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>transpose</TT></STRONG> : <A HREF="node7.html#7125"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG><TT>WSplitInner</TT></STRONG><DL>
-<DD><STRONG><TT>current</TT></STRONG> : <A HREF="node7.html#7128"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-</DL>
-<DD><STRONG><TT>WSplitRegion</TT></STRONG><DL>
-<DD><STRONG><TT>reg</TT></STRONG> : <A HREF="node7.html#7131"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
-</DL>
-<DD><STRONG><TT>WSplitSplit</TT></STRONG><DL>
-<DD><STRONG><TT>br</TT></STRONG> : <A HREF="node7.html#7134"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>dir</TT></STRONG> : <A HREF="node7.html#7136"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>flip</TT></STRONG> : <A HREF="node7.html#7138"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-<DD><STRONG><TT>tl</TT></STRONG> : <A HREF="node7.html#7140"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
-</DL>
-<DD><STRONG><TT>WStatusBar</TT></STRONG><DL>
-<DD><STRONG><TT>get_template_table</TT></STRONG> : <A HREF="node7.html#9551"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>is_systray_extl</TT></STRONG> : <A HREF="node7.html#9553"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_systray</TT></STRONG> : <A HREF="node7.html#9555"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_template</TT></STRONG> : <A HREF="node7.html#9557"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>set_template_table</TT></STRONG> : <A HREF="node7.html#9559"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>update</TT></STRONG> : <A HREF="node7.html#9561"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-</DL>
-<DD><STRONG><TT>WTiling</TT></STRONG>
- : <A HREF="node3.html#429"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>farthest</TT></STRONG> : <A HREF="node7.html#7147"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>flip_at</TT></STRONG> : <A HREF="node7.html#7143"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>managed_i</TT></STRONG> : <A HREF="node7.html#7149"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>nextto</TT></STRONG> : <A HREF="node7.html#7151"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>node_of</TT></STRONG> : <A HREF="node7.html#7153"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>set_floating</TT></STRONG> : <A HREF="node7.html#7157"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>set_floating_at</TT></STRONG> : <A HREF="node7.html#7155"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split</TT></STRONG> : <A HREF="node7.html#7159"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_at</TT></STRONG> : <A HREF="node7.html#7161"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_top</TT></STRONG> : <A HREF="node7.html#7163"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>split_tree</TT></STRONG> : <A HREF="node7.html#7165"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>transpose_at</TT></STRONG> : <A HREF="node7.html#7145"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-<DD><STRONG><TT>unsplit_at</TT></STRONG> : <A HREF="node7.html#7167"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
-</DL>
-<DD><STRONG><TT>WWindow</TT></STRONG>
+<DD><STRONG>WTiling</STRONG>
: <A HREF="node3.html#421"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DL>
-<DD><STRONG><TT>p_move</TT></STRONG> : <A HREF="node7.html#4692"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
-<DD><STRONG><TT>p_resize</TT></STRONG> : <A HREF="node7.html#4694"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
-<DD><STRONG><TT>xid</TT></STRONG> : <A HREF="node7.html#4696"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
-</DL>
-<DD><STRONG><TT>x_change_property</TT></STRONG>
- : <A HREF="node7.html#4495"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_delete_property</TT></STRONG>
- : <A HREF="node7.html#4497"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_atom_name</TT></STRONG>
- : <A HREF="node7.html#4499"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_text_property</TT></STRONG>
- : <A HREF="node7.html#4501"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_get_window_property</TT></STRONG>
- : <A HREF="node7.html#4503"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_intern_atom</TT></STRONG>
- : <A HREF="node7.html#4505"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>x_set_text_property</TT></STRONG>
- : <A HREF="node7.html#4507"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>xid</TT></STRONG>
- : <A HREF="node7.html#4542"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
- | <A HREF="node7.html#4697"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN></A>
+<DD><STRONG>WWindow</STRONG>
+ : <A HREF="node3.html#413"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>Xinerama</STRONG>
- : <A HREF="node3.html#339"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node3.html#335"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><SPAN CLASS="textit">xmodmap</SPAN></STRONG>
- : <A HREF="node4.html#879"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
+ : <A HREF="node4.html#884"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
<DD><STRONG>xprop</STRONG>
- : <A HREF="node4.html#1411"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#1428"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
</DL>
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
-<TITLE>About this document ...</TITLE>
-<META NAME="description" CONTENT="About this document ...">
+<TITLE>Bibliography</TITLE>
+<META NAME="description" CONTENT="Bibliography">
<META NAME="keywords" CONTENT="ionconf">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<LINK REL="STYLESHEET" HREF="ionconf.css">
+<LINK REL="next" HREF="node13.html">
<LINK REL="previous" HREF="node11.html">
<LINK REL="up" HREF="ionconf.html">
+<LINK REL="next" HREF="node13.html">
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_g.png">
-<A NAME="tex2html452"
+<A NAME="tex2html492"
+ HREF="node13.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
+<A NAME="tex2html486"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html448"
+<A NAME="tex2html480"
HREF="node11.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html454"
+<A NAME="tex2html488"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html456"
+<A NAME="tex2html490"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Up:</B> <A NAME="tex2html453"
+<B> Next:</B> <A NAME="tex2html493"
+ HREF="node13.html">About this document ...</A>
+<B> Up:</B> <A NAME="tex2html487"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html449"
+<B> Previous:</B> <A NAME="tex2html481"
HREF="node11.html">Index</A>
- <B> <A NAME="tex2html455"
+ <B> <A NAME="tex2html489"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html457"
+ <B> <A NAME="tex2html491"
HREF="node11.html">Index</A></B>
-<BR>
-<BR></DIV>
+<BR><BR></DIV>
<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION001200000000000000000">
+Bibliography</A>
+</H2><DL COMPACT><DD><P></P><DT><A NAME="scripts">1</A>
+<DD> The Ion 3 scripts repository,
+ <TT><A NAME="tex2html11"
+ HREF="http://iki.fi/tuomov/repos/ion-scripts-3/">http://iki.fi/tuomov/repos/ion-scripts-3/</A></TT>.
+</DL>
-<H1><A NAME="SECTION001200000000000000000">
-About this document ...</A>
-</H1>
- <STRONG>Configuring and extending Ion3 with Lua</STRONG><P>
-This document was generated using the
-<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2002-2-1 (1.71)
-<P>
-Copyright © 1993, 1994, 1995, 1996,
-Nikos Drakos,
-Computer Based Learning Unit, University of Leeds.
-<BR>
-Copyright © 1997, 1998, 1999,
-<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>,
-Mathematics Department, Macquarie University, Sydney.
-<P>
-The command line arguments were: <BR>
- <STRONG>latex2html</STRONG> <TT>-show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf</TT>
<P>
-The translation was initiated by tuomov on 2007-03-18
<BR><HR>
</BODY>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>About this document ...</TITLE>
+<META NAME="description" CONTENT="About this document ...">
+<META NAME="keywords" CONTENT="ionconf">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="ionconf.css">
+
+<LINK REL="previous" HREF="node12.html">
+<LINK REL="up" HREF="ionconf.html">
+</HEAD>
+
+<BODY >
+
+<DIV CLASS="navigation"><!--Navigation Panel-->
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next_g.png">
+<A NAME="tex2html498"
+ HREF="ionconf.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
+<A NAME="tex2html494"
+ HREF="node12.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
+<A NAME="tex2html500"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
+<A NAME="tex2html502"
+ HREF="node11.html">
+<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
+<BR>
+<B> Up:</B> <A NAME="tex2html499"
+ HREF="ionconf.html">Configuring and extending Ion3</A>
+<B> Previous:</B> <A NAME="tex2html495"
+ HREF="node12.html">Bibliography</A>
+ <B> <A NAME="tex2html501"
+ HREF="node1.html">Contents</A></B>
+ <B> <A NAME="tex2html503"
+ HREF="node11.html">Index</A></B>
+<BR>
+<BR></DIV>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION001300000000000000000">
+About this document ...</A>
+</H1>
+ <STRONG>Configuring and extending Ion3 with Lua</STRONG><P>
+This document was generated using the
+<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2002-2-1 (1.71)
+<P>
+Copyright © 1993, 1994, 1995, 1996,
+Nikos Drakos,
+Computer Based Learning Unit, University of Leeds.
+<BR>
+Copyright © 1997, 1998, 1999,
+<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>,
+Mathematics Department, Macquarie University, Sydney.
+<P>
+The command line arguments were: <BR>
+ <STRONG>latex2html</STRONG> <TT>-show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf</TT>
+<P>
+The translation was initiated by tuomov on 2007-05-06
+<BR><HR>
+
+</BODY>
+</HTML>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html232"
+<A NAME="tex2html253"
HREF="node3.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html226"
+<A NAME="tex2html247"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html220"
+<A NAME="tex2html241"
HREF="node1.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html228"
+<A NAME="tex2html249"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html230"
+<A NAME="tex2html251"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html233"
+<B> Next:</B> <A NAME="tex2html254"
HREF="node3.html">2. Preliminaries: Key concepts</A>
-<B> Up:</B> <A NAME="tex2html227"
+<B> Up:</B> <A NAME="tex2html248"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html221"
+<B> Previous:</B> <A NAME="tex2html242"
HREF="node1.html">Contents</A>
- <B> <A NAME="tex2html229"
+ <B> <A NAME="tex2html250"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html231"
+ <B> <A NAME="tex2html252"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
</H1>
<P>
-This document is an ''advanced user'' manual for Ion, the X11 window manager,
-and version 3 specifically. It is an attempt attempt at documenting what is
-in Ion's configuration files, how to configure Ion by simple modifications
+This document is an ``advanced user'' manual for the X11 window manager
+Ion, version 3. It is an attempt at documenting things that go into Ion's
+configuration files, how to configure Ion by simple modifications
to these files and how to write more complex extensions in Lua, the
lightweight configuration and scripting language used by Ion.
<P>
-Readers unfamiliar with Lua is advised to first glance at the Lua manual at
+Readers unfamiliar with Lua might first want to first glance at some
+Lua documentation at
<P>
<DIV ALIGN="CENTER">
<TT><A NAME="tex2html1"
- HREF="http://www.lua.org/docs.html">http://www.lua.org/docs.html</A></TT>
-</DIV>
-
-<P>
-and perhaps some tutorial pages at the lua-users wiki:
+ HREF="http://www.lua.org/docs.html">http://www.lua.org/docs.html</A></TT>, or
+<BR> <TT><A NAME="tex2html2"
+ HREF="http://lua-users.org/wiki/LuaTutorial">http://lua-users.org/wiki/LuaTutorial</A></TT>,
-<P>
-<DIV ALIGN="CENTER">
-<TT><A NAME="tex2html2"
- HREF="http://lua-users.org/wiki/LuaTutorial">http://lua-users.org/wiki/LuaTutorial</A></TT>
</DIV>
<P>
-Back in this document, first in chapter <A HREF="node3.html#chap:prelim">2</A> some key
-concepts and relations are explained. These include the module system
-and Ion's object and class hierarchies. While it might not at first
-occur that knowing such things would be necessary to <SPAN CLASS="textit">configure</SPAN>
-a program, this material is essential because of the object-oriented
-nature of most of Ion's scripting interface.
+although this should not be strictly necessary for basic modifications
+of configuration files for anyone with at least some familiarity with
+programming languages.
<P>
-The new user, fed up with the default key bindings and eager to just
-quickly configure Ion to his liking may question the reasons for
-exposing the ''heavy'' internal OO structure in the scripting and
-configuration interface. I'm not the one to blame him for that.
-Sure it would be faster to configure Ion to everyone's liking
-if a simpler binding configuration interface was provided. Such an
-interface would, however, also be far more limited and make writing
-extensions more complicated and the advantages from using a real
-scripting language would be partly lost. One more advantage from
-a rich scripting and configuration interface is that it allows
-implementing scripts to read alternate configuration file formats,
-ones that could be, for example, modified by external configuration tools.
+Back in this document, first in chapter <A HREF="node3.html#chap:prelim">2</A> some key
+concepts and relations are explained. These include the module system,
+and Ion's object (or ``region'') and class hierarchies. While it may
+not be necessary to study the latter for basic copy-paste modifications
+of configuration files - for that you should not really need this
+manual either - it is, however, essential to for more extensive
+customisation, due to the semi-object-oriented nature of most of
+Ion's scripting interface. Knowing the different object types also
+helps dealing with the different binding ``contexts'' (see
+Section <A HREF="node4.html#sec:bindings">3.3</A>) that to some extent mirror these classes.
<P>
-In chapter <A HREF="node4.html#chap:config">3</A> the very basic Ion configuration know-how
-is provided. All the different configuration files and their locations
-are explained and instructions are given to allow the reader to
-configure bindings and so-called ''winprops''. Chapter <A HREF="node5.html#chap:gr">4</A>
-explains the notion of drawing engines and graphical styles and how to
-write new looks for Ion and more advanced aspects of Ion's scripting
-interface are documented in chapter <A HREF="node6.html#chap:tricks">5</A> (a work in
-progress).
+The new user, fed up with the default key bindings and eager to
+just quickly configure Ion to his liking, may therefore just want
+to skip to Chapter <A HREF="node4.html#chap:config">3</A>, and attempt to work from therefore.
+That chapter provides the very basic Ion configuration know-how
+is provided: all the different configuration files and their locations
+are explained, instructions are given to allow the reader to
+configure bindings and so-called ``winprops'', and the statusbar
+templates are also explained.
<P>
+Next, Chapter <A HREF="node5.html#chap:gr">4</A> explains the notion of drawing engines
+and graphical styles and how to write new looks for Ion. More advanced
+aspects of Ion's scripting interface are documented in Chapter
+<A HREF="node6.html#chap:tricks">5</A>.
Finally, most of the functions provided by Ion's scripting interface
-are listed and documented in the Function reference in chapter
-<A HREF="node7.html#sec:exports">6</A>. At the end of the document is an alphabetical
-listing of all these functions.
-
-<P>
+are listed and documented in the Function reference in Chapter
+<A HREF="node7.html#sec:exports">6</A>. At the end of the document an alphabetical
+listing of all these functions may be found.
<P>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
-<A NAME="tex2html232"
+<A NAME="tex2html253"
HREF="node3.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html226"
+<A NAME="tex2html247"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html220"
+<A NAME="tex2html241"
HREF="node1.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html228"
+<A NAME="tex2html249"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html230"
+<A NAME="tex2html251"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html233"
+<B> Next:</B> <A NAME="tex2html254"
HREF="node3.html">2. Preliminaries: Key concepts</A>
-<B> Up:</B> <A NAME="tex2html227"
+<B> Up:</B> <A NAME="tex2html248"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html221"
+<B> Previous:</B> <A NAME="tex2html242"
HREF="node1.html">Contents</A>
- <B> <A NAME="tex2html229"
+ <B> <A NAME="tex2html250"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html231"
+ <B> <A NAME="tex2html252"
HREF="node11.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html246"
+<A NAME="tex2html267"
HREF="node4.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html240"
+<A NAME="tex2html261"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html234"
+<A NAME="tex2html255"
HREF="node2.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html242"
+<A NAME="tex2html263"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html244"
+<A NAME="tex2html265"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html247"
+<B> Next:</B> <A NAME="tex2html268"
HREF="node4.html">3. Basic configuration</A>
-<B> Up:</B> <A NAME="tex2html241"
+<B> Up:</B> <A NAME="tex2html262"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html235"
+<B> Previous:</B> <A NAME="tex2html256"
HREF="node2.html">1. Introduction</A>
- <B> <A NAME="tex2html243"
+ <B> <A NAME="tex2html264"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html245"
+ <B> <A NAME="tex2html266"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL CLASS="ChildLinks">
-<LI><A NAME="tex2html248"
+<LI><A NAME="tex2html269"
HREF="node3.html#SECTION00310000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Modules</A>
-<LI><A NAME="tex2html249"
+<LI><A NAME="tex2html270"
HREF="node3.html#SECTION00320000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Class and object hierarchies</A>
<UL>
-<LI><A NAME="tex2html250"
+<LI><A NAME="tex2html271"
HREF="node3.html#SECTION00321000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Class hierarchy</A>
-<LI><A NAME="tex2html251"
+<LI><A NAME="tex2html272"
HREF="node3.html#SECTION00322000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Object hierarchies: WRegion parents and managers</A>
<UL>
-<LI><A NAME="tex2html252"
+<LI><A NAME="tex2html273"
HREF="node3.html#SECTION00322100000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
-<LI><A NAME="tex2html253"
+<LI><A NAME="tex2html274"
HREF="node3.html#SECTION00322200000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Manager-managed relations</A>
</UL>
-<LI><A NAME="tex2html254"
+<LI><A NAME="tex2html275"
HREF="node3.html#SECTION00323000000000000000"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Summary</A>
</UL></UL>
<!--End of Table of Child-Links-->
</DD>
<DT><STRONG><SPAN CLASS="textit">mod_dock</SPAN></STRONG></DT>
-<DD>Module for docking Window Maker dockapps.
+<DD>Module for docking Window Maker dock-apps.
The dock can both float and be embedded as the statusbar.
</DD>
be toggled on/off everywhere. Think of the 'console' in some
first-person shooters.
-</DD>
-<DT><STRONG><SPAN CLASS="textit">mod_mgmtmode</SPAN></STRONG></DT>
-<DD>Support module for implementing ''management
- modes'' with a XOR-frame similar to move/resize mode around selected
- region.
-
</DD>
<DT><STRONG><SPAN CLASS="textit">mod_sm</SPAN></STRONG></DT>
<DD>Session management support module.
but they are not discussed here; see chapter <A HREF="node5.html#chap:gr">4</A>.
<P>
-The stock configuration for the 'ion3' executable loads all of the modules
-mentioned above except <SPAN CLASS="textit">mod_dock</SPAN> and filemod_mgmtmode.
-The stock configuration for the 'pwm3' executable (which differs from the
-'ion3' executable in a few configuration details, such as Xinerama usage)
+The stock configuration for the <SPAN CLASS="textit">ion3</SPAN> executable loads all of the
+modules mentioned above except <SPAN CLASS="textit">mod_dock</SPAN>.
+The stock configuration for the <SPAN CLASS="textit">pwm3</SPAN> executable (which differs
+from the <SPAN CLASS="textit">ion3</SPAN> executable in a few configuration details)
loads another set of modules.
<P>
<P>
While Ion does not not have a truly object-oriented design
<A NAME="tex2html3"
- HREF="#foot306"><SUP><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A>,
+ HREF="#foot297"><SUP><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A>,
things that appear on the computer screen are, however, quite
-naturally expressed as such ''objects''. Therefore Ion implements
+naturally expressed as such ``objects''. Therefore Ion implements
a rather primitive OO system for these screen objects and some
other things.
<P>
For simplicity we consider only the essential-for-basic-configuration
Ioncore, <SPAN CLASS="textit">mod_tiling</SPAN> and <SPAN CLASS="textit">mod_query</SPAN> classes.
-See Appendix <A HREF="node9.html#app:fullhierarchy">B</A> for the full class hierachy visible
+See Appendix <A HREF="node9.html#app:fullhierarchy">B</A> for the full class hierarchy visible
to Lua side.
<P>
<P>
-<DIV ALIGN="CENTER"><A NAME="fig:classhierarchy"></A><A NAME="412"></A>
+<DIV ALIGN="CENTER"><A NAME="fig:classhierarchy"></A><A NAME="404"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2.1:</STRONG>
Partial Ioncore, <SPAN CLASS="textit">mod_tiling</SPAN> and <SPAN CLASS="textit">mod_query</SPAN>
<P>
<DL>
<DT><STRONG>Obj</STRONG></DT>
-<DD><A NAME="418"></A>
+<DD><A NAME="410"></A>
Is the base of Ion's object system.
<P>
</DD>
<DT><STRONG>WRegion</STRONG></DT>
-<DD><A NAME="419"></A>
+<DD><A NAME="411"></A>
is the base class for everything corresponding to something on the
screen. Each object of type WRegion has a size and position
relative to the parent WRegion. While a big part of Ion
operates on these instead of more specialised classes, WRegion
- is a ''virtual'' base class in that there are no objects of ''pure''
+ is a ``virtual'' base class in that there are no objects of ``pure''
type WRegion; all concrete regions are objects of some class
that inherits WRegion.
<P>
</DD>
<DT><STRONG>WClientWin</STRONG></DT>
-<DD><A NAME="420"></A> is a class for
+<DD><A NAME="412"></A> is a class for
client window objects, the objects that window managers are
supposed to manage.
<P>
</DD>
<DT><STRONG>WWindow</STRONG></DT>
-<DD><A NAME="421"></A> is the base class for all
+<DD><A NAME="413"></A> is the base class for all
internal objects having an X window associated to them
(WClientWins also have X windows associated to them).
-<P>
-</DD>
-<DT><STRONG>WRootWin</STRONG></DT>
-<DD><A NAME="422"></A> is the class for
- root windows<A NAME="336"></A> of X screens<A NAME="337"></A>.
- Note that an ''X screen'' or root window is not necessarily a
- single physical screen<A NAME="338"></A> as a root window
- may be split over multiple screens when hacks such as
- Xinerama<A NAME="339"></A> are used. (Actually there can be only
- one root window when Xinerama is used.)
-
<P>
</DD>
<DT><STRONG>WMPlex</STRONG></DT>
-<DD>is a base class for all regions that''multiplex''
+<DD>is a base class for all regions that ``multiplex''
other regions. This means that of the regions managed by the multiplexer,
- only one can be displayed at a time. Classes that inhereit WMPlex
- include screens and frames.
+ only one can be displayed at a time.
<P>
</DD>
<DT><STRONG>WScreen</STRONG></DT>
-<DD><A NAME="423"></A> is the class for objects
- corresponding to physical screens. Screens may share a root
- window when the Xinerama extension is used as explained above.
+<DD><A NAME="414"></A> is an instance of WMPlex
+ for screens.
+
+<P>
+</DD>
+<DT><STRONG>WRootWin</STRONG></DT>
+<DD><A NAME="415"></A> is the class for
+ root windows<A NAME="331"></A> of X screens<A NAME="332"></A>.
+ It is an instance of WScreen.
+ Note that an ``X screen'' or root window is not necessarily a
+ single physical screen<A NAME="334"></A> as a root window
+ may be split over multiple screens when ugly hacks such as
+ Xinerama<A NAME="335"></A> are used. (Actually there can be only
+ one root window when Xinerama is used.)
<P>
</DD>
<DT><STRONG>WFrame</STRONG></DT>
-<DD><A NAME="424"></A> is the class for frames.
- While most Ion's objects have no graphical presentation, frames basically
- add to WMPlexes the decorations around client windows
- (borders, tabs).
+<DD><A NAME="416"></A> is the class for frames.
+ While most Ion's objects have no graphical presentation, frames
+ basically add to WMPlexes the decorations around client
+ windows (borders, tabs).
<P>
</DD>
<DT><STRONG>WGroup</STRONG></DT>
-<DD><A NAME="425"></A> is the base class for groups.
+<DD><A NAME="417"></A> is the base class for groups.
Particular types of groups are workspaces
- (WGroupWS<A NAME="426"></A>)
+ (WGroupWS<A NAME="418"></A>)
and groups of client windows
- (WGroupCW<A NAME="427"></A>).
+ (WGroupCW<A NAME="419"></A>).
</DD>
</DL>
<P>
<DL>
<DT><STRONG>WTiling</STRONG></DT>
-<DD><A NAME="429"></A> is the class for tilings
+<DD><A NAME="421"></A> is the class for tilings
of frames.
</DD>
<DT><STRONG>WSplit</STRONG></DT>
-<DD><A NAME="430"></A> (or, more specifically, classes
+<DD><A NAME="422"></A> (or, more specifically, classes
that inherit it) encode the WTiling tree structure.
</DD>
</DL>
<P>
<DL>
<DT><STRONG>WInput</STRONG></DT>
-<DD><A NAME="432"></A> is a virtual base class for the
+<DD><A NAME="424"></A> is a virtual base class for the
two classes below.
</DD>
<DT><STRONG>WEdln</STRONG></DT>
-<DD><A NAME="433"></A> is the class for the ''queries'',
+<DD><A NAME="425"></A> is the class for the ``queries'',
the text inputs that usually appear at bottoms of frames and sometimes
- screens. Queries are the functional equivalent of ''mini buffers'' in
+ screens. Queries are the functional equivalent of ``mini buffers'' in
many text editors.
</DD>
<DT><STRONG>WMessage</STRONG></DT>
-<DD><A NAME="434"></A> implements the boxes for
+<DD><A NAME="426"></A> implements the boxes for
warning and other messages that Ion may wish to display to the user.
These also usually appear at bottoms of frames.
</DD>
</DL>
<P>
-There are also some other ''proxy'' classes that do not refer
+There are also some other ``proxy'' classes that do not refer
to objects on the screen. The only important one of these for
basic configuration is WMoveresMode that is used for
binding callbacks in the move and resize mode.
<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
</H4>
Each object of type WRegion has a parent and possibly a manager
-associated to it. The parent<A NAME="375"></A> for an object is always a
+associated to it. The parent<A NAME="367"></A> for an object is always a
WWindow and for WRegion with an X window (WClientWin,
WWindow) the parent WWindow is given by the same relation of
the X windows. For other WRegions the relation is not as clear.
<P>
-<DIV ALIGN="CENTER"><A NAME="fig:parentship"></A><A NAME="386"></A>
+<DIV ALIGN="CENTER"><A NAME="fig:parentship"></A><A NAME="378"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2.2:</STRONG>
Most common parent-child relations</CAPTION>
<P>
WRegions have very little control over their children as a parent.
-The manager<A NAME="390"></A> WRegion has much more control over its
+The manager<A NAME="382"></A> WRegion has much more control over its
managed WRegions. Managers, for example, handle resize requests,
focusing and displaying of the managed regions. Indeed the manager--managed
relationship gives a better picture of the logical ordering of objects on
<P>
-<DIV ALIGN="CENTER"><A NAME="fig:managership"></A><A NAME="398"></A>
+<DIV ALIGN="CENTER"><A NAME="fig:managership"></A><A NAME="390"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2.3:</STRONG>
Most common manager-managed relations</CAPTION>
<P>
<BR><HR><H4>Footnotes</H4>
<DL>
-<DT><A NAME="foot306">... design</A><A
+<DT><A NAME="foot297">... design</A><A
HREF="node3.html#tex2html3"><SUP><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A></DT>
<DD>the author doesn't like such artificial designs
</DL>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
-<A NAME="tex2html246"
+<A NAME="tex2html267"
HREF="node4.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html240"
+<A NAME="tex2html261"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html234"
+<A NAME="tex2html255"
HREF="node2.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html242"
+<A NAME="tex2html263"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html244"
+<A NAME="tex2html265"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html247"
+<B> Next:</B> <A NAME="tex2html268"
HREF="node4.html">3. Basic configuration</A>
-<B> Up:</B> <A NAME="tex2html241"
+<B> Up:</B> <A NAME="tex2html262"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html235"
+<B> Previous:</B> <A NAME="tex2html256"
HREF="node2.html">1. Introduction</A>
- <B> <A NAME="tex2html243"
+ <B> <A NAME="tex2html264"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html245"
+ <B> <A NAME="tex2html266"
HREF="node11.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html267"
+<A NAME="tex2html288"
HREF="node5.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html261"
+<A NAME="tex2html282"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html255"
+<A NAME="tex2html276"
HREF="node3.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html263"
+<A NAME="tex2html284"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html265"
+<A NAME="tex2html286"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html268"
+<B> Next:</B> <A NAME="tex2html289"
HREF="node5.html">4. Graphical styles</A>
-<B> Up:</B> <A NAME="tex2html262"
+<B> Up:</B> <A NAME="tex2html283"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html256"
+<B> Previous:</B> <A NAME="tex2html277"
HREF="node3.html">2. Preliminaries: Key concepts</A>
- <B> <A NAME="tex2html264"
+ <B> <A NAME="tex2html285"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html266"
+ <B> <A NAME="tex2html287"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL CLASS="ChildLinks">
-<LI><A NAME="tex2html269"
+<LI><A NAME="tex2html290"
HREF="node4.html#SECTION00410000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> The configuration files</A>
-<LI><A NAME="tex2html270"
+<LI><A NAME="tex2html291"
HREF="node4.html#SECTION00420000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> A walk through <SPAN CLASS="textit">cfg_ion.lua</SPAN></A>
-<LI><A NAME="tex2html271"
+<LI><A NAME="tex2html292"
HREF="node4.html#SECTION00430000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Keys and rodents</A>
<UL>
-<LI><A NAME="tex2html272"
+<LI><A NAME="tex2html293"
HREF="node4.html#SECTION00431000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Binding handlers and special variables</A>
-<LI><A NAME="tex2html273"
+<LI><A NAME="tex2html294"
HREF="node4.html#SECTION00432000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Guards</A>
-<LI><A NAME="tex2html274"
+<LI><A NAME="tex2html295"
HREF="node4.html#SECTION00433000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining the bindings</A>
-<LI><A NAME="tex2html275"
+<LI><A NAME="tex2html296"
HREF="node4.html#SECTION00434000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Examples</A>
-<LI><A NAME="tex2html276"
+<LI><A NAME="tex2html297"
HREF="node4.html#SECTION00435000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Key specifications</A>
-<LI><A NAME="tex2html277"
+<LI><A NAME="tex2html298"
HREF="node4.html#SECTION00436000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> Button specifications</A>
-<LI><A NAME="tex2html278"
+<LI><A NAME="tex2html299"
HREF="node4.html#SECTION00437000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">7</SPAN> A further note on the default binding configuration</A>
</UL>
<BR>
-<LI><A NAME="tex2html279"
+<LI><A NAME="tex2html300"
HREF="node4.html#SECTION00440000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN> Menus</A>
<UL>
-<LI><A NAME="tex2html280"
+<LI><A NAME="tex2html301"
HREF="node4.html#SECTION00441000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Defining menus</A>
-<LI><A NAME="tex2html281"
+<LI><A NAME="tex2html302"
HREF="node4.html#SECTION00442000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Special menus</A>
-<LI><A NAME="tex2html282"
+<LI><A NAME="tex2html303"
HREF="node4.html#SECTION00443000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Defining context menus</A>
-<LI><A NAME="tex2html283"
+<LI><A NAME="tex2html304"
HREF="node4.html#SECTION00444000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">4</SPAN> Displaying menus</A>
</UL>
<BR>
-<LI><A NAME="tex2html284"
+<LI><A NAME="tex2html305"
HREF="node4.html#SECTION00450000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN> Winprops</A>
<UL>
-<LI><A NAME="tex2html285"
+<LI><A NAME="tex2html306"
HREF="node4.html#SECTION00451000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Sizehint winprops</A>
-<LI><A NAME="tex2html286"
+<LI><A NAME="tex2html307"
HREF="node4.html#SECTION00452000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Classes, roles and instances</A>
-<LI><A NAME="tex2html287"
+<LI><A NAME="tex2html308"
HREF="node4.html#SECTION00453000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Finding window identification</A>
-<LI><A NAME="tex2html288"
+<LI><A NAME="tex2html309"
HREF="node4.html#SECTION00454000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Some common examples</A>
<UL>
-<LI><A NAME="tex2html289"
+<LI><A NAME="tex2html310"
HREF="node4.html#SECTION00454100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Acrobat Reader</A>
-<LI><A NAME="tex2html290"
- HREF="node4.html#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
-<LI><A NAME="tex2html291"
- HREF="node4.html#SECTION00454300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+<LI><A NAME="tex2html311"
+ HREF="node4.html#SECTION00454200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Forcing newly created windows in named frames</A>
+</UL>
+</UL>
+<BR>
+<LI><A NAME="tex2html312"
+ HREF="node4.html#SECTION00460000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> The statusbar</A>
+<UL>
+<LI><A NAME="tex2html313"
+ HREF="node4.html#SECTION00461000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> The template</A>
+<LI><A NAME="tex2html314"
+ HREF="node4.html#SECTION00462000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> The systray</A>
+<LI><A NAME="tex2html315"
+ HREF="node4.html#SECTION00463000000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Monitors</A>
+<UL>
+<LI><A NAME="tex2html316"
+ HREF="node4.html#SECTION00463100000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Date</A>
+<LI><A NAME="tex2html317"
+ HREF="node4.html#SECTION00463200000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Load</A>
+<LI><A NAME="tex2html318"
+ HREF="node4.html#SECTION00463300000000000000"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Mail</A>
</UL></UL></UL>
<!--End of Table of Child-Links-->
<HR>
<A HREF="#sec:walkthrough">3.2</A>.
How keys and mouse action are bound to functions is described in detail
in <A HREF="#sec:bindings">3.3</A> and in section <A HREF="#sec:winprops">3.5</A> winprops are
-explained. For a reference on exported functions, see section
-<A HREF="node7.html#sec:exports">6</A>.
+explained. Finally, the statusbar is explained in <A HREF="#sec:statusbar">3.6</A>.
+For a reference on exported functions, see section <A HREF="node7.html#sec:exports">6</A>.
<P>
Ion3, to which document applies, stores its stock configuration files in
<SPAN CLASS="textit">/usr/local/etc/ion3/</SPAN> unless you, the OS package maintainer or
whoever installed the package on the system has modified the variables
-<TT>PREFIX</TT><A NAME="590"></A> or
-<TT>ETCDIR</TT><A NAME="591"></A> in
-<SPAN CLASS="textit">system.mk</SPAN><A NAME="592"></A> before compiling Ion.
+<TT>PREFIX</TT><A NAME="582"></A> or
+<TT>ETCDIR</TT><A NAME="583"></A> in
+<SPAN CLASS="textit">system.mk</SPAN><A NAME="584"></A> before compiling Ion.
In the first case you probably know where to find the files and in
the other case the system administrator or the OS package maintainer
should have provided documentation to point to the correct location.
files are attempted before <SPAN CLASS="textit">.lua</SPAN> files.
<P>
-All the configuration files are named <SPAN CLASS="textit">cfg_*.lua</SPAN> with the ''<SPAN CLASS="textit">*</SPAN>''
+All the configuration files are named <SPAN CLASS="textit">cfg_*.lua</SPAN> with the ``<SPAN CLASS="textit">*</SPAN>''
part varying. The configuration file for each module <SPAN CLASS="textit">mod_modname</SPAN> is
<SPAN CLASS="textit">cfg_modname.lua</SPAN>, with <SPAN CLASS="textit">modname</SPAN> varying by the module in
question. The following table summarises these and other configuration
the necessary modules and other configuration files configuring some
more specific aspects of Ion are loaded there. In this section we
take a walk through the stock <SPAN CLASS="textit">cfg_ion.lua</SPAN>.
-Notice that most of the settings are commented-out (<TT>-</TT> is a
+Notice that most of the settings are commented-out (<code>--</code> is a
line comment in Lua) in the actual file, as they're the defaults
nevertheless.
<P>
-The first thing one in the file is to set
+The first thing done in the file, is to set
<PRE>
META="Mod1+"
ALTMETA=""
</PRE>
These settings cause most of Ion's key bindings to use <SPAN CLASS="textbf">Mod1</SPAN> as the
-modifier key. If <TT>ALTMETA</TT> is set, it is used as modifier for the keys
-that don't normally use a modifier. for details on modifiers and key
-binding setup in general see section <A HREF="#sec:bindings">3.3</A>.
+modifier key. If <TT>ALTMETA</TT> is set, it is used as modifier for the
+keys that don't normally use a modifier. Note that these two are Lua
+variables used in the configuration files only, and not Ion settings.
+For details on modifiers and key binding setup in general, see section
+<A HREF="#sec:bindings">3.3</A>.
<P>
Next we do some basic feel configuration:
<P>
As a next step, in the actual <SPAN CLASS="textit">cfg_ion.lua</SPAN> file, we load
-<SPAN CLASS="textit">cfg_defaults.lua</SPAN>. However, it is merely a conveniency file for
+<SPAN CLASS="textit">cfg_defaults.lua</SPAN>. However, it is merely a convenience file for
doing exactly what we will going through below, and what is commented
out in the actual file. If you do not want to load what
<SPAN CLASS="textit">cfg_defaults.lua</SPAN> loads, just comment out the corresponding
Most bindings and menus are defined in <SPAN CLASS="textit">cfg_ioncore.lua</SPAN>.
Details on making such definitions follow in sections <A HREF="#sec:bindings">3.3</A>
and <A HREF="#sec:menus">3.4</A>, respectively.
-some kludges or ''winprops'' to make some applications behave better
-under Ion are colledted in <SPAN CLASS="textit">cfg_kludges.lua</SPAN>; see section
+some kludges or ``winprops'' to make some applications behave better
+under Ion are collected in <SPAN CLASS="textit">cfg_kludges.lua</SPAN>; see section
<A HREF="#sec:winprops">3.5</A> for details. In addition to these, this file
lists quite a few statements of the form
<PRE>
<P>
Bindings are defined by calling the function
-<A HREF="node7.html#fn:ioncore.defbindings"><TT>defbindings</TT></A> with the ''context'' of the
+<A HREF="node7.html#fn:ioncore.defbindings"><TT>defbindings</TT></A> with the ``context'' of the
bindings and the a table of new bindings to make. The context is simply
string indicating one of the classes of regions (or modes such as
WMoveresMode) introduced in section <A HREF="node3.html#sec:objects">2.2</A>, and fully
<P>
There has been some confusion among users about the need to define the
-''context'' for each binding, so let me try to explain this design
+``context'' for each binding, so let me try to explain this design
decision here. The thing is that if there was a just a simple 'bind this
key to this action' method without knowledge of the context, some
limitations would have to be made on the available actions and writing
bind the same function to different key for different types of objects.
Indeed, the workspace and frame tab switching functions are the same both
classes being based on WMPlex, and in the stock configuration the
-switch to <SPAN CLASS="MATH"></SPAN>:th workspaces is bound to <SPAN CLASS="textbf">Mod1+n</SPAN> while the switch to
-<SPAN CLASS="MATH"></SPAN>:th tab is bound to the sequence <SPAN CLASS="textbf">Mod1+k n</SPAN>.
-
-<P>
-Currently known ''contexts'' include:
-<TT>WScreen</TT>,
-<TT>WMPlex</TT>,
-<TT>WMPlex.toplevel</TT>,
-<TT>WFrame</TT>,
-<TT>WFrame.toplevel</TT>,
-<TT>WFrame.floating</TT>,
-<TT>WFrame.tiled</TT>,
-<TT>WFrame.transient</TT>,
-<TT>WMoveresMode</TT>,
-<TT>WGroup</TT>,
-<TT>WGroupCW</TT>,
-<TT>WGroupWS</TT>,
-<TT>WClientWin</TT>,
-<TT>WTiling</TT>, and
-<TT>WStatusBar</TT>.
+switch to <SPAN CLASS="MATH"><IMG
+ WIDTH="15" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
+ SRC="img1.png"
+ ALT="$n$"></SPAN>:th workspaces is bound to <SPAN CLASS="textbf">Mod1+n</SPAN> while the switch to
+<SPAN CLASS="MATH"><IMG
+ WIDTH="15" HEIGHT="14" ALIGN="BOTTOM" BORDER="0"
+ SRC="img1.png"
+ ALT="$n$"></SPAN>:th tab is bound to the sequence <SPAN CLASS="textbf">Mod1+k n</SPAN>.
+
+<P>
+Currently known contexts include:
+`<TT>WScreen</TT>',
+`<TT>WMPlex</TT>',
+`<TT>WMPlex.toplevel</TT>',
+`<TT>WFrame</TT>',
+`<TT>WFrame.toplevel</TT>',
+`<TT>WFrame.floating</TT>',
+`<TT>WFrame.tiled</TT>',
+`<TT>WFrame.transient</TT>',
+`<TT>WMoveresMode</TT>',
+`<TT>WGroup</TT>',
+`<TT>WGroupCW</TT>',
+`<TT>WGroupWS</TT>',
+`<TT>WClientWin</TT>',
+`<TT>WTiling</TT>', and
+`<TT>WStatusBar</TT>'.
Most of these should be self-explanatory, corresponding to objects
-of class with the same name. The ones with <TT>.toplevel</TT> suffix
-refer to screens and ''toplevel'' frames, i.e. frames that are
-not used for transient windows. Likewise <TT>.transient</TT> refers
-to frames in transient mode, and <TT>.tiled</TT> and <TT>.floating</TT>
+of class with the same name. The ones with `<TT>.toplevel</TT>' suffix
+refer to screens and ``toplevel'' frames, i.e. frames that are
+not used for transient windows. Likewise `<TT>.transient</TT>' refers
+to frames in transient mode, and `<TT>.tiled</TT>' and `<TT>.floating</TT>'
to frames in, respectively, tiled and floating modes.
<P>
<P>
Unlike in Ion2, in Ion3 binding handlers are not normally passed as
-''anonymous functions'', although this is still possible. The preferred
-method now is to pass the code of the handler as a string. Two special
-variables are available in this code. These are
+``anonymous functions'', although this is still possible. The preferred
+method now is to pass the code of the handler as a string. Two following
+special variables are available in this code.
<P>
<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
</TR>
<TR><TD ALIGN="LEFT"><TT>_chld</TT></TD>
<TD ALIGN="LEFT">Object corresponding to the currently active child window of the
- object referred to by <TT>_</TT>.</TD>
+ object referred to by <TT>_</TT>. This should seldom be needed.</TD>
</TR>
</TABLE>
<P>
-For example, supposing '<TT>_</TT>' is a WFrame, the following
-handler should move the active window to the right, if possible:
+For example, supposing <TT>_</TT> (underscore) is a WFrame, the
+following handler should move the active window to the right, if
+possible:
<P>
<PRE>
<P>
To suppress error messages, each binding handler may also be accompanied
-by a ''guard'' expression that blocks the handler from being called when
+by a ``guard'' expression that blocks the handler from being called when
the guard condition is not met. Currently the following guard expressions
are supported (for both <TT>_sub</TT> and <TT>_chld</TT>):
<TR><TD ALIGN="LEFT">Guard</TD>
<TD ALIGN="LEFT">Description</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>"_sub:non-nil"</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>_sub:non-nil</TT>'</TD>
<TD ALIGN="LEFT">The <TT>_sub</TT> parameter must be set.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>"_sub:SomeClass"</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>_sub:SomeClass</TT>'</TD>
<TD ALIGN="LEFT">The <TT>_sub</TT> parameter must be member
of class SomeClass.</TD>
</TR>
Key presses:
<UL>
-<LI><A HREF="#fn:kpress"><TT>kpress</TT></A><TT>(keyspec, handler [, guard])</TT>,
+<LI><A HREF="node7.html#fn:ioncore.kpress"><TT>kpress</TT></A>, and
+ <A HREF="node7.html#fn:ioncore.kpress_wait"><TT>kpress_wait</TT></A><TT>(keyspec, handler [, guard])</TT>.
</LI>
-<LI><A HREF="#fn:kpress_wait"><TT>kpress_wait</TT></A><TT>(keyspec, handler [, guard])</TT> and
+<LI><A HREF="node7.html#fn:ioncore.submap"><TT>submap</TT></A><TT>(keyspec, { ... more key bindings ... })</TT>.
</LI>
-<LI><A HREF="#fn:submap"><TT>submap</TT></A><TT>(keyspec, { ... more key bindings ... })</TT>.
+<LI><A HREF="node7.html#fn:ioncore.submap_enter"><TT>submap_enter</TT></A>, and
+ <A HREF="node7.html#fn:ioncore.submap_wait"><TT>submap_wait</TT></A><TT>(handler [, guard])</TT>.
</LI>
</UL>
Mouse actions:
<UL>
-<LI><A HREF="#fn:mclick"><TT>mclick</TT></A><TT>(buttonspec, handler [, guard])</TT>,
-</LI>
-<LI><A HREF="#fn:mdblclick"><TT>mdblclick</TT></A><TT>(buttonspec, handler [, guard])</TT>,
-</LI>
-<LI><A HREF="#fn:mpress"><TT>mpress</TT></A><TT>(buttonspec, handler [, guard])</TT> and
-</LI>
-<LI><A HREF="#fn:mdrag"><TT>mdrag</TT></A><TT>(buttonspec, handler [, guard])</TT>.
+<LI><A HREF="node7.html#fn:ioncore.mclick"><TT>mclick</TT></A>,
+ <A HREF="node7.html#fn:ioncore.mdblclick"><TT>mdblclick</TT></A>,
+ <A HREF="node7.html#fn:ioncore.mpress"><TT>mpress</TT></A>, and
+ <A HREF="node7.html#fn:ioncore.mdrag"><TT>mdrag</TT></A><TT>(buttonspec, handler [, guard])</TT>.
</LI>
</UL>
<P>
The actions that most of these functions correspond to should be clear
-and as explained in the reference, <A HREF="#fn:kpress_wait"><TT>kpress_wait</TT></A> is simply
-<A HREF="#fn:kpress"><TT>kpress</TT></A> with a flag set instructing Ioncore wait for all
-modifiers to be released before processing any further actions.
+and as explained in the reference, <A HREF="node7.html#fn:ioncore.kpress_wait"><TT>kpress_wait</TT></A> is simply
+<A HREF="node7.html#fn:ioncore.kpress"><TT>kpress</TT></A> with a flag set instructing Ioncore wait for
+all modifiers to be released before processing any further actions.
This is to stop one from accidentally calling e.g.
-<A HREF="node7.html#fn:WRegion.rqclose"><TT>WRegion.rqclose</TT></A> multiple times in a row. The <A HREF="#fn:submap"><TT>submap</TT></A>
-function is used to define submaps or ''prefix maps''. The second
-argument to this function is table listing the key press actions
-(<A HREF="#fn:kpress"><TT>kpress</TT></A>) in the submap
+<A HREF="node7.html#fn:WRegion.rqclose"><TT>WRegion.rqclose</TT></A> multiple times in a row. The
+<A HREF="node7.html#fn:ioncore.submap"><TT>submap</TT></A> function is used to define submaps or
+``prefix maps''. The second argument to this function is table listing
+the key press actions (<A HREF="node7.html#fn:ioncore.kpress"><TT>kpress</TT></A>) in the submap.
+The <A HREF="node7.html#fn:ioncore.submap_enter"><TT>submap_enter</TT></A> handler is called when the submap
+is entered, in which this handler is defined. Likewise, the
+<A HREF="node7.html#fn:ioncore.submap_wait"><TT>submap_wait</TT></A> handler is called when all modifiers
+have been released while waiting for further key presses in the submap.
<P>
The parameters <TT>keyspec</TT> and <TT>buttonspec</TT> are explained below
As seen above, the functions that create key binding specifications require
a <TT>keyspec</TT> argument. This argument should be a string containing the
name of a key as listed in the X header file <SPAN CLASS="textit">keysymdef.h</SPAN><A NAME="tex2html7"
- HREF="#foot871"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A> without the <TT>XK_</TT> prefix.
-<A NAME="872"></A>
+ HREF="#foot876"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A> without the <TT>XK_</TT> prefix.
+<A NAME="877"></A>
Most of the key names are quite intuitive while some are not. For example,
the <SPAN CLASS="textbf">Enter</SPAN> key on the main part of the keyboard has the less common
name <SPAN CLASS="textbf">Return</SPAN> while the one the numpad is called <SPAN CLASS="textbf">KP_Enter</SPAN>.
<P>
-The <TT>keyspec</TT> string may optionally have multiple ''modifier'' names
+The <TT>keyspec</TT> string may optionally have multiple ``modifier'' names
followed by a plus sign (<TT>+</TT>) as a prefix. X defines the following
modifiers:
-<BLOCKQUOTE>
+
+<P>
<SPAN CLASS="textbf">Shift</SPAN>, <SPAN CLASS="textbf">Control</SPAN>, <SPAN CLASS="textbf">Mod1</SPAN> to <SPAN CLASS="textbf">Mod5</SPAN>,
<SPAN CLASS="textbf">AnyModifier</SPAN> and <SPAN CLASS="textbf">Lock</SPAN>.
-<A NAME="873"></A>
-<A NAME="874"></A>
-<A NAME="875"></A>
-<A NAME="876"></A>
-<A NAME="877"></A>
-
-</BLOCKQUOTE>
+<A NAME="878"></A>
+<A NAME="879"></A>
+<A NAME="880"></A>
+<A NAME="881"></A>
+<A NAME="882"></A>
<P>
X allows binding all of these modifiers to almost any key and while this
list of modifiers does not explicitly list keys such as
-<SPAN CLASS="textbf">Alt</SPAN><A NAME="878"></A> that are common on modern keyboards, such
+<SPAN CLASS="textbf">Alt</SPAN><A NAME="883"></A> that are common on modern keyboards, such
keys are bound to one of the <SPAN CLASS="textbf">ModN</SPAN>. On systems running XFree86
<SPAN CLASS="textbf">Alt</SPAN> is usually <SPAN CLASS="textbf">Mod1</SPAN>. On Suns <SPAN CLASS="textbf">Mod1</SPAN> is the diamond key
-and <SPAN CLASS="textbf">Alt</SPAN> something else. One of the ''flying window'' keys on so
+and <SPAN CLASS="textbf">Alt</SPAN> something else. One of the ``flying window'' keys on so
called Windows-keyboards is probably mapped to <SPAN CLASS="textbf">Mod3</SPAN> if you have
-such a key. Use the program <SPAN CLASS="textit">xmodmap</SPAN><A NAME="879"></A>
+such a key. Use the program <SPAN CLASS="textit">xmodmap</SPAN><A NAME="884"></A>
to find out what exactly is bound where.
<P>
default.
<P>
-Ion ignores the <SPAN CLASS="textbf">Lock</SPAN> modifier and any <SPAN CLASS="textbf">ModN</SPAN> (<SPAN CLASS="MATH"></SPAN>)
-bound to <SPAN CLASS="textbf">NumLock</SPAN><A NAME="880"></A> or
-<SPAN CLASS="textbf">ScrollLock</SPAN><A NAME="881"></A>
+Ion ignores the <SPAN CLASS="textbf">Lock</SPAN> modifier and any <SPAN CLASS="textbf">ModN</SPAN> (<SPAN CLASS="MATH"><IMG
+ WIDTH="82" HEIGHT="15" ALIGN="BOTTOM" BORDER="0"
+ SRC="img2.png"
+ ALT="$N=1{\ldots} 5$"></SPAN>)
+bound to <SPAN CLASS="textbf">NumLock</SPAN><A NAME="885"></A> or
+<SPAN CLASS="textbf">ScrollLock</SPAN><A NAME="886"></A>
by default because such<A NAME="tex2html8"
- HREF="#foot850"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></SUP></A> locking keys may otherwise
+ HREF="#foot855"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></SUP></A> locking keys may otherwise
cause confusion.
<P>
Button specifications are similar to key definitions but now
instead of specifying modifiers and a key, you specify modifiers
and one of the button names <SPAN CLASS="textbf">Button1</SPAN> to
-<SPAN CLASS="textbf">Button5</SPAN><A NAME="882"></A>. Additionally the
+<SPAN CLASS="textbf">Button5</SPAN><A NAME="887"></A>. Additionally the
specification may end with an optional area name following an @-sign.
Only frames currently support areas, and the supported values in this
case are
-<TT>"border"</TT>, <TT>"tab"</TT>, <TT>"empty_tab"</TT>, <TT>"client"</TT> and
-<TT>nil</TT> (for the whole frame).
+`<TT>border</TT>', `<TT>tab</TT>', `<TT>empty_tab</TT>', `<TT>client</TT>'
+and <TT>nil</TT> (for the whole frame).
<P>
For example, the following code binds dragging a tab with the first
<P>
The default binding configuration contains references to the variables
<TT>META</TT> and <TT>ALTMETA</TT> instead of directly using the default
-values of <TT>"Mod1+"</TT> and <TT>""</TT> (nothing). As explained in
+values of `<TT>Mod1+</TT>' and `' (nothing). As explained in
section <A HREF="#sec:walkthrough">3.2</A>, the definitions of these variables
appear in <SPAN CLASS="textit">cfg_ion.lua</SPAN>. This way you can easily change the the
modifiers used by all bindings in the default configuration without
</H3>
<P>
-<A NAME="1128"></A>
-<A NAME="1185"></A>
-<A NAME="1186"></A>
-<A NAME="1187"></A>
+<A NAME="1144"></A>
+<A NAME="1198"></A>
+<A NAME="1199"></A>
+<A NAME="1200"></A>
In the stock configuration file setup, menus are defined in the file
<SPAN CLASS="textit">cfg_menus.lua</SPAN> as previously mentioned. The <SPAN CLASS="textit">mod_menu</SPAN> module
must be loaded for one to be able to define menus, and this is done with
<TR><TD ALIGN="LEFT">Menu name</TD>
<TD ALIGN="LEFT">Description</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>windowlist</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>windowlist</TT>'</TD>
<TD ALIGN="LEFT">List of all client windows. Activating an entry jumps to that window.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>workspacelist</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>workspacelist</TT>'</TD>
<TD ALIGN="LEFT">List of all workspaces. Activating an entry jumps to that workspaces.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>focuslist</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>focuslist</TT>'</TD>
<TD ALIGN="LEFT">List of client windows with recent activity in them, followed by
previously focused client windows.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>focuslist_</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>focuslist_</TT>'</TD>
<TD ALIGN="LEFT">List of previously focused client windows.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>stylemenu</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>stylemenu</TT>'</TD>
<TD ALIGN="LEFT">List of available <SPAN CLASS="textit">look_*.lua</SPAN> style files. Activating an entry
loads that style and ask to save the selection.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>ctxmenu</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>ctxmenu</TT>'</TD>
<TD ALIGN="LEFT">Context menu for given object.</TD>
</TR>
</TABLE>
</H3>
<P>
-The ''ctxmenu'' is a special menu that is assembled from a defined context
+The ``ctxmenu'' is a special menu that is assembled from a defined context
menu for the object for which the menu was opened for, but also includes
the context menus for the manager objects as submenus.
</PRE>
<P>
-Some of the same ''modes'' as were available for some bindings
-may also be used: <TT>WFrame.tiled</TT>, <TT>WFrame.floating</TT>,
-and <TT>WFrame.transient</TT>.
+Some of the same ``modes'' as were available for some bindings
+may also be used: `<TT>WFrame.tiled</TT>', `<TT>WFrame.floating</TT>',
+and `<TT>WFrame.transient</TT>'.
<P>
<TR><TD ALIGN="LEFT"><A HREF="node7.html#fn:mod_menu.grabmenu"><TT>mod_menu.grabmenu</TT></A></TD>
<TD ALIGN="LEFT">A special version of <A HREF="node7.html#fn:mod_menu.menu"><TT>mod_menu.menu</TT></A> that grabs the keyboard
and is scrolled with a given key until all modifiers have been released,
- after which the selected entry is activated. This function is meant to
- be used for implementing, for example, Win***s-style <SPAN CLASS="textbf">Alt-Tab</SPAN>
- handling.<A NAME="tex2html9"
- HREF="#foot1188"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></SUP></A></TD>
+ after which the selected entry is activated.</TD>
</TR>
</TABLE>
</H2>
<P>
-The so-called ''winprops''<A NAME="1283"></A> can be used to change how
+The so-called ``winprops''<A NAME="1291"></A> can be used to change how
specific windows are handled and to set up some kludges to deal with
badly behaving applications. They are defined by calling the function
<TT>defwinprop</TT> with a table containing the properties to set and the
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1438"></A>
+<DD><A NAME="1451"></A>
Set this to <TT>true</TT> for Acrobat Reader. It has an annoying
habit of trying to manage its dialogs instead of setting them as
transients and letting the window manager do its job, causing
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1439"></A>
+<DD><A NAME="1452"></A>
Set this to open the window in a floating frame, when
in a group.
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1440"></A>
+<DD><A NAME="1453"></A>
Should the window be initially in full screen mode?
</DD>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1441"></A>
+<DD><A NAME="1454"></A>
Should configure requests on the window be ignored?
Only has effect on floating windows.
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1442"></A>
+<DD><A NAME="1455"></A>
Ignore extended WM hints <TT>_NET_ACTIVE_WINDOW</TT> request.
</DD>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1443"></A>
+<DD><A NAME="1456"></A>
Should a newly created client window always be made
active, even if the allocated frame isn't.
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1444"></A>
+<DD><A NAME="1457"></A>
If the region specified by <TT>target</TT> winprop does not exist
(or that winprop is not set), create a new workspace using the
previously stored layout (see <A HREF="node7.html#fn:ioncore.deflayout"><TT>ioncore.deflayout</TT></A>) named by
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1445"></A>
+<DD><A NAME="1458"></A>
Discard this winprop after first use.
</DD>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1446"></A>
+<DD><A NAME="1459"></A>
Put the window in the statusbar, in the named tray component,
- (The default tray component is called simply <TT>"systray"</TT>,
+ (The default tray component is called simply `<TT>systray</TT>',
and others you give names to in your custom template, always
- prefixed by <TT>"systray_"</TT>.
+ prefixed by `<TT>systray_</TT>'.
</DD>
</DL>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1447"></A>
+<DD><A NAME="1460"></A>
Should a newly mapped client window be switched to within
its frame.
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1448"></A>
+<DD><A NAME="1461"></A>
The name of an object (workspace, frame) that should manage
windows of this type. See also <TT>new_group</TT>.
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1449"></A>
- <TT>"normal"</TT>: No change in behaviour. <TT>"current"</TT>:
+<DD><A NAME="1462"></A>
+ `<TT>normal</TT>': No change in behaviour. `<TT>current</TT>':
The window should be thought of as a transient for the current
active client window (if any) even if it is not marked as a
- transient by the application. <TT>"off"</TT>: The window should
+ transient by the application. `<TT>off</TT>': The window should
be handled as a normal window even if it is marked as a
transient by the application.
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD><A NAME="1450"></A>
+<DD><A NAME="1463"></A>
Should frames be made transparent when this window is selected?
<BR>
<P>
Additionally, the winprops
-<TT>max_size</TT><A NAME="1451"></A>,
-<TT>min_size</TT><A NAME="1452"></A>,
-<TT>aspect</TT><A NAME="1453"></A>,
-<TT>resizeinc</TT><A NAME="1454"></A>,
+<TT>max_size</TT><A NAME="1464"></A>,
+<TT>min_size</TT><A NAME="1465"></A>,
+<TT>aspect</TT><A NAME="1466"></A>,
+<TT>resizeinc</TT><A NAME="1467"></A>,
and
-<TT>ignore_max_size</TT><A NAME="1455"></A>,
-<TT>ignore_min_size</TT><A NAME="1456"></A>,
-<TT>ignore_aspect</TT><A NAME="1457"></A>,
-<TT>ignore_resizeinc</TT><A NAME="1458"></A>,
+<TT>ignore_max_size</TT><A NAME="1468"></A>,
+<TT>ignore_min_size</TT><A NAME="1469"></A>,
+<TT>ignore_aspect</TT><A NAME="1470"></A>,
+<TT>ignore_resizeinc</TT><A NAME="1471"></A>,
may be used to override application-supplied size hints. The four
first ones are tables with the fields <TT>w</TT> and <TT>h</TT>, indicating
the width and height size hints in pixels, and the latter ignore
<P>
Finally, the boolean
-<TT>userpos</TT><A NAME="1459"></A> option may be used to
+<TT>userpos</TT><A NAME="1472"></A> option may be used to
override the <TT>USPosition</TT> flag of the size hints. Normally,
when this flag is set, Ion tries to respect the supplied window
position more than when it is not set. Obviously, this makes sense
</H3>
<P>
-The identification information in the winprop specification is usually the
-<TT>class</TT><A NAME="1460"></A>,
-<TT>role</TT><A NAME="1461"></A>,
-<TT>instance</TT><A NAME="1462"></A> and
-<TT>name</TT>
-of the window. The <TT>name</TT> field is a Lua-style regular expression
-matched against the window's title and the rest are strings that must
-exactly match the corresponding window information. It is not necessary
-to specify all of these fields.
+The identification information supported are
+<TT>class</TT><A NAME="1473"></A>,
+<TT>role</TT><A NAME="1474"></A>,
+<TT>instance</TT><A NAME="1475"></A>,
+<TT>name</TT><A NAME="1476"></A>,
+<TT>is_transient</TT><A NAME="1477"></A>, and
+<TT>is_dockapp</TT><A NAME="1478"></A>.
+It is not necessary to specify all of these fields.
+The first three are strings, and must exactly match the
+corresponding information obtained from the window's properties.
+The <TT>name</TT> field is a Lua-style regular expression matched against
+the window's title. The <TT>is_transient</TT> field is a boolean that can
+be used to include or exclude transients only, while the <TT>is_dockapp</TT>
+field is set by Ion for the dock windows of Window Maker dockapp protocol
+dockapps. Usually this is the only information available for these
+<SPAN CLASS="textit">icon</SPAN> windows.
<P>
Ion looks for a matching winprop in the order listed by the following
<TR><TD ALIGN="LEFT"><TT>class</TT></TD>
<TD ALIGN="LEFT"><TT>role</TT></TD>
<TD ALIGN="LEFT"><TT>instance</TT></TD>
-<TD ALIGN="LEFT"><TT>name</TT></TD>
+<TD ALIGN="LEFT">other</TD>
</TR>
<TR><TD ALIGN="LEFT">E</TD>
<TD ALIGN="LEFT">E</TD>
</DIV>
<P>
-If there are multiple winprops with other identification information
-the same but different <TT>name</TT>, the longest match is chosen.
+If there are multiple matching winprops with the same
+<TT>class</TT>, <TT>role</TT> and <TT>instance</TT>, but other information
+different, the most recently defined one is used.
<P>
for a window and all the transient windows managed within it.
<P>
-<A NAME="1411"></A>
+<A NAME="1428"></A>
Another way to get the identification information is to use <TT>xprop</TT>.
Simply run To get class and instance, simply run <TT>xprop WM_CLASS</TT>
and click on the particular window of interest. The class is the latter of
This method, however, will not work on transients.
<P>
-<A NAME="1415"></A>
-So-called ''transient windows'' are usually short-lived dialogs (although
+<A NAME="1432"></A>
+So-called ``transient windows'' are usually short-lived dialogs (although
some programs abuse this property) that have a parent window that they are
-''transient for''. On tiled workspaces Ion displays these windows
-simulatenously with the parent window at the bottom of the same frame.
+``transient for''. On tiled workspaces Ion displays these windows
+simultaneously with the parent window at the bottom of the same frame.
Unfortunately <TT>xprop</TT> is stupid and can't cope with this situation,
returning the parent window's properties when the transient is clicked on.
For this reason you'll have to do a little extra work to get the properties
-for that window.<A NAME="tex2html11"
- HREF="#foot1464"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></SUP></A>
+for that window.<A NAME="tex2html9"
+ HREF="#foot1480"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></SUP></A>
<P>
Finally, it should be mentioned that too many authors these days
-''forget'' to set this vital identification to anything meaningful:
-everything except name is the same for all of the programs's
-windows, for example.
+``forget'' to set this vital identification to anything meaningful:
+everything except name is the same for all of the program's
+windows, for example. Some other programs only set this information
+after the window has been mapped, i.e. the window manager has been
+told to start managing it, which is obviously too late.
+Gtk applications in particular are often guilty on both counts.
<P>
<P>
<H4><A NAME="SECTION00454200000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Fixing a Mozilla Firebird transient</A>
-</H4>
-
-<P>
-Mozilla Firebird (0.7) incorrectly does not set the <TT>WM_TRANSIENT_FOR</TT>
-property for the dialog that is used to ask the action to take for a file.
-It, however, sets the the property point to the main window for the save
-dialog. This can be annoying and confusing, as the first dialog is not
-closed before the second is displayed.
-
-<P>
-We'd like the first dialog to be transient to the main window. The closest
-we can get to that is to consider it transient to the current window (if
-there's one). Unfortunately Firebird does not set any meaningful classes,
-instances or roles for the windows, so we'll have to rely on an ugly title
-match.
-
-<P>
-<PRE>
-defwinprop{
- class = "MozillaFirebird-bin",
- name = "Opening .*",
- transient_mode = "current",
-}
-</PRE>
-
-<P>
-
-<H4><A NAME="SECTION00454300000000000000">
-<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Forcing newly created windows in named frames</A>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Forcing newly created windows in named frames</A>
</H4>
<P>
<P>
For this example to work, we have to somehow create a frame named
-<TT>sysmonframe</TT>. One way to do this is to make the following
+`<TT>sysmonframe</TT>'. One way to do this is to make the following
call in the <SPAN CLASS="textbf">Mod1+F3</SPAN> Lua code query:
<P>
Recall that <TT>_</TT> points to the multiplexer (frame or screen) in which
the query was opened. Running this code should open a new query prefilled
with the current name of the frame. In our example we would change the
-name to <TT>sysmonframe</TT>, but we could just as well have used the
+name to `<TT>sysmonframe</TT>', but we could just as well have used the
default name formed from the frame's class name and an instance number.
<P>
+<H2><A NAME="SECTION00460000000000000000"></A>
+<A NAME="sec:statusbar"></A>
+<BR>
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN> The statusbar
+</H2>
+
+<P>
+The <SPAN CLASS="textit">mod_statusbar</SPAN> module provides a statusbar that adapts to
+layouts of tilings, using only the minimal space needed. Ion only
+supports one adaptive ``status display'' object per screen, so this
+statusbar is mutually exclusive with the embedded mode of <SPAN CLASS="textit">mod_dock</SPAN>
+docks.
+
+<P>
+The statusbar is configured in <SPAN CLASS="textit">cfg_statusbar.lua</SPAN>. Typically,
+the configuration consists of two steps: creating a statusbar with
+<A HREF="node7.html#fn:mod_statusbar.create"><TT>mod_statusbar.create</TT></A>, and then launching the separate
+<TT>ion-statusd</TT> status daemon process with
+<A HREF="node7.html#fn:mod_statusbar.launch_statusd"><TT>mod_statusbar.launch_statusd</TT></A>. This latter phase is done
+automatically, if it was not done by the configuration file, but
+the configuration file may pass extra parameters to <TT>ion-statusd</TT>
+monitors. (See Section <A HREF="node6.html#sec:statusd">5.4</A> for more information on
+writing <TT>ion-statusd</TT> monitors.)
+
+<P>
+A typical <SPAN CLASS="textit">cfg_statusbar.lua</SPAN> configuration might look as follows:
+
+<P>
+<PRE>
+-- Create a statusbar
+mod_statusbar.create{
+ screen = 0, -- First screen,
+ pos = 'bl', -- bottom left corner
+ systray = true, -- Swallow systray windows
+
+ -- The template
+ template = "[ %date || load:% %>load || mail:% %>mail_new/%>mail_total ]"
+ .. " %filler%systray",
+}
+
+-- Launch ion-statusd.
+mod_statusbar.launch_statusd{
+ -- Date meter
+ date={
+ -- ISO-8601 date format with additional abbreviated day name
+ date_format='%a %Y-%m-%d %H:%M',
+ },
+}
+</PRE>
+
+<P>
+
+<H3><A NAME="SECTION00461000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> The template</A>
+</H3>
+
+<P>
+The template specifies what is shown on the statusbar; for information
+on the other options to <A HREF="node7.html#fn:mod_statusbar.create"><TT>mod_statusbar.create</TT></A>, see the reference.
+Strings of the form `<TT>%spec</TT>' tokens specially interpreter by
+the statusbar; the rest appears verbatim. The <TT>spec</TT> typically
+consists of the name of the value/meter to display (beginning with a latin
+alphabet), but may be preceded by an alignment specifier and a number
+specifying the minimum width. The alignment specifiers are: `<TT>></TT>'
+for right, `<TT><</TT>' for left, and `<TT>|</TT>' for centring. Additionally,
+space following `<TT>%</TT>' (that is, the string `<TT>% </TT>'), adds
+``stretchable space'' at that point. The special string `<TT>%filler</TT>'
+may be used to flush the rest of the template to the right end of
+the statusbar.
+
+<P>
+The stretchable space works as follows: <SPAN CLASS="textit">mod_statusbar</SPAN> remembers
+the widest string (in terms of graphical presentation) that it has
+seen for each meter, unless the width has been otherwise constrained.
+If there is stretchable space in the template, it tries to make the
+meter always take this much space, by stretching any space found in
+the direction indicated by the alignment specifier: the opposite
+direction for left or right alignment, and both for centring.
+
+<P>
+
+<H3><A NAME="SECTION00462000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> The systray</A>
+</H3>
+
+<P>
+The special `<TT>%systray</TT>' and `<TT>%systray_*</TT>'
+(`<TT>*</TT>' varying) monitors indicate where to place system tray
+windows. There may be multiple of these. KDE-protocol system tray
+icons are placed in `<TT>%systray</TT>' automatically, unless disabled
+with the <TT>systray</TT> option. Otherwise the <TT>statusbar</TT> winprop may
+be used to place any window in any particular `<TT>%systray_*</TT>'.
+
+<P>
+
+<H3><A NAME="SECTION00463000000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Monitors</A>
+</H3>
+
+<P>
+The part before the first
+underscore of each monitor name, describes the script/plugin/module
+that provides the meter, and any configuration should be passed
+in the a corresponding sub-table <A HREF="node7.html#fn:mod_statusbar.launch_statusd"><TT>mod_statusbar.launch_statusd</TT></A>.
+Ion comes with date, load and mail (for plain old mbox)
+<TT>ion-statusd</TT> monitor scripts. More may be obtained from
+the scripts repository [<A
+ HREF="node12.html#scripts">1</A>]. These included scripts
+provide the following monitors and their options
+
+<P>
+
+<H4><A NAME="SECTION00463100000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Date</A>
+</H4>
+
+<P>
+Options: <TT>date_format</TT>: The date format in as seen above,
+in the usual <TT>strftime</TT> format. <TT>formats</TT>: table of
+formats for additional date monitors, the key being the name
+of the monitor (without the `<TT>date_</TT>' prefix).
+
+<P>
+Monitors: `<TT>date</TT>' and other user-specified ones with the
+`<TT>date_</TT>' prefix.
+
+<P>
+
+<H4><A NAME="SECTION00463200000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Load</A>
+</H4>
+
+<P>
+Options: <TT>update_interval</TT>: Update interval in milliseconds
+(default 10s). <TT>important_threshold</TT>: Threshold above which
+the load is marked as important (default 1.5), so that the
+drawing engine may be suitably hinted. <TT>critical_threshold</TT>:
+Threshold above which the load is marked as critical (default 4.0).
+
+<P>
+Monitors: `<TT>load</TT>' (for all three values),
+`<TT>load_1min</TT>', `<TT>load_5min</TT>' and `<TT>load_15min</TT>'.
+
+<P>
+
+<H4><A NAME="SECTION00463300000000000000">
+<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Mail</A>
+</H4>
+
+<P>
+Options: <TT>update_interval</TT>: Update interval in milliseconds
+(default 1min). <TT>mbox</TT>: mbox-format mailbox location
+(default <code>$MAIL</code>).
+<TT>files</TT>: list of additional mailboxes, the key giving the
+name of the monitor.
+
+<P>
+Monitors: `<TT>mail_new</TT>', `<TT>mail_unread</TT>',
+`<TT>mail_total</TT>', and corresponding
+`<TT>mail_*_new</TT>', `<TT>mail_*_unread</TT>', and `<TT>mail_*_total</TT>'
+for the additional mailboxes (`<TT>*</TT>' varying).
+
+<P>
+
<P>
<BR><HR><H4>Footnotes</H4>
<DL>
-<DT><A NAME="foot871">...keysymdef.h</A><A
+<DT><A NAME="foot876">...keysymdef.h</A><A
HREF="node4.html#tex2html7"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A></DT>
<DD>This file can usually be found in the directory
<SPAN CLASS="textit">/usr/X11R6/include/X11/</SPAN>.
</DD>
-<DT><A NAME="foot850">... such</A><A
+<DT><A NAME="foot855">... such</A><A
HREF="node4.html#tex2html8"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></SUP></A></DT>
<DD>Completely useless keys that should be
gotten rid of in the author's opinion.
</DD>
-<DT><A NAME="foot1188">... handling.</A><A
+<DT><A NAME="foot1480">... window.</A><A
HREF="node4.html#tex2html9"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></SUP></A></DT>
-<DD>See the <SPAN CLASS="textit">wcirculate.lua</SPAN> script in the Ion
- scripts repository <TT><A NAME="tex2html10"
- HREF="http://iki.fi/tuomov/repos/ion-scripts-3/">http://iki.fi/tuomov/repos/ion-scripts-3/</A></TT>.
-
-</DD>
-<DT><A NAME="foot1464">... window.</A><A
- HREF="node4.html#tex2html11"><SUP><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></SUP></A></DT>
<DD>There's a patch to <TT>xprop</TT> to
fix this, but nothing seems to be happening with respect to including it in
XFree86.
</DL>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
-<A NAME="tex2html267"
+<A NAME="tex2html288"
HREF="node5.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html261"
+<A NAME="tex2html282"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html255"
+<A NAME="tex2html276"
HREF="node3.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html263"
+<A NAME="tex2html284"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html265"
+<A NAME="tex2html286"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html268"
+<B> Next:</B> <A NAME="tex2html289"
HREF="node5.html">4. Graphical styles</A>
-<B> Up:</B> <A NAME="tex2html262"
+<B> Up:</B> <A NAME="tex2html283"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html256"
+<B> Previous:</B> <A NAME="tex2html277"
HREF="node3.html">2. Preliminaries: Key concepts</A>
- <B> <A NAME="tex2html264"
+ <B> <A NAME="tex2html285"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html266"
+ <B> <A NAME="tex2html287"
HREF="node11.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html304"
+<A NAME="tex2html331"
HREF="node6.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html298"
+<A NAME="tex2html325"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html292"
+<A NAME="tex2html319"
HREF="node4.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html300"
+<A NAME="tex2html327"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html302"
+<A NAME="tex2html329"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html305"
+<B> Next:</B> <A NAME="tex2html332"
HREF="node6.html">5. Scripting</A>
-<B> Up:</B> <A NAME="tex2html299"
+<B> Up:</B> <A NAME="tex2html326"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html293"
+<B> Previous:</B> <A NAME="tex2html320"
HREF="node4.html">3. Basic configuration</A>
- <B> <A NAME="tex2html301"
+ <B> <A NAME="tex2html328"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html303"
+ <B> <A NAME="tex2html330"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL CLASS="ChildLinks">
-<LI><A NAME="tex2html306"
+<LI><A NAME="tex2html333"
HREF="node5.html#SECTION00510000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Drawing engines, style specifications and sub-styles</A>
<UL>
-<LI><A NAME="tex2html307"
+<LI><A NAME="tex2html334"
HREF="node5.html#SECTION00511000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Known styles and substyles</A>
<UL>
-<LI><A NAME="tex2html308"
+<LI><A NAME="tex2html335"
HREF="node5.html#SECTION00511100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frames</A>
-<LI><A NAME="tex2html309"
+<LI><A NAME="tex2html336"
HREF="node5.html#SECTION00511200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> Tabs and menu entries</A>
-<LI><A NAME="tex2html310"
+<LI><A NAME="tex2html337"
HREF="node5.html#SECTION00511300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> The rest</A>
</UL>
</UL>
<BR>
-<LI><A NAME="tex2html311"
+<LI><A NAME="tex2html338"
HREF="node5.html#SECTION00520000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining styles for the default drawing engine</A>
<UL>
-<LI><A NAME="tex2html312"
+<LI><A NAME="tex2html339"
HREF="node5.html#SECTION00521000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> The structure of the configuration files</A>
-<LI><A NAME="tex2html313"
+<LI><A NAME="tex2html340"
HREF="node5.html#SECTION00522000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Defining the styles</A>
<UL>
-<LI><A NAME="tex2html314"
+<LI><A NAME="tex2html341"
HREF="node5.html#SECTION00522100000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Colours</A>
-<LI><A NAME="tex2html315"
+<LI><A NAME="tex2html342"
HREF="node5.html#SECTION00522200000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Borders and widths</A>
-<LI><A NAME="tex2html316"
+<LI><A NAME="tex2html343"
HREF="node5.html#SECTION00522300000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> Text</A>
-<LI><A NAME="tex2html317"
+<LI><A NAME="tex2html344"
HREF="node5.html#SECTION00522400000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> Miscellaneous</A>
-<LI><A NAME="tex2html318"
+<LI><A NAME="tex2html345"
HREF="node5.html#SECTION00522500000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> Substyles</A>
</UL>
-<LI><A NAME="tex2html319"
+<LI><A NAME="tex2html346"
HREF="node5.html#SECTION00523000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> An example</A>
</UL>
<BR>
-<LI><A NAME="tex2html320"
+<LI><A NAME="tex2html347"
HREF="node5.html#SECTION00530000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
<UL>
-<LI><A NAME="tex2html321"
- HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
-<LI><A NAME="tex2html322"
- HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+<LI><A NAME="tex2html348"
+ HREF="node5.html#SECTION00531000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frame user attributes</A>
+<LI><A NAME="tex2html349"
+ HREF="node5.html#SECTION00532000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style `<TT>frame</TT>'</A>
+<LI><A NAME="tex2html350"
+ HREF="node5.html#SECTION00533000000000000000"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Extra fields for style `<TT>dock</TT>'</A>
</UL></UL>
<!--End of Table of Child-Links-->
<HR>
This chapter first gives in section <A HREF="#sec:engines">4.1</A> a general outline
of how drawing engines are used, of style specifications and then
in section <A HREF="#sec:defaultde">4.2</A> describes how to specify styles
-for the default drawing engine.
+for the default drawing engine. Some additional settings and
+user attributes are explained in Sections <A HREF="#sec:grmisc">4.3</A>.
<P>
<H2><A NAME="SECTION00510000000000000000"></A>
-<A NAME="sec:engines"></A><A NAME="1708"></A><A NAME="1709"></A>
+<A NAME="sec:engines"></A><A NAME="1887"></A><A NAME="1888"></A>
<BR>
<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> Drawing engines, style specifications and sub-styles
</H2>
<P>
Ion's drawing routines are abstracted into so-called drawing engine
modules that can, again depending on the system, be dynamically
-loaded as needed. The drawing engine modules provide ''brushes''
+loaded as needed. The drawing engine modules provide ``brushes''
that objects can use to draw some high-level primitives such
as borders and text boxes (in addition to simple text and rectangle
drawing) on their windows and configure e.g. the shape and
</PRE>
<P>
-An example of such a style specification is <TT>tab-frame</TT>;
+An example of such a style specification is `<TT>tab-frame</TT>';
see the table in subsection <A HREF="#sec:styles">4.1.1</A> for more styles.
<P>
When an object asks for a brush of certain style, the selected
drawing engine will attempt to find the closest match to this
specification. The styles/brushes defined by the drawing engines
-may have asterisks (<code>*</code>) as some of the elements indicating
+may have asterisks (`<TT>*</TT>') as some of the elements indicating
a match to anything. Exact matches are preferred to asterisk
matches and longer matches to shorter. For example, let a brush
-for style <TT>foo-bar-baz</TT> be queried, then the following
+for style `<TT>foo-bar-baz</TT>' be queried, then the following
brushes are in order of preference:
<P>
<PRE>
attr1-attr2-...-attrn
</PRE>
-These extra attributes are called <SPAN CLASS="textit">substyles</SPAN><A NAME="1720"></A>
+These extra attributes are called <SPAN CLASS="textit">substyles</SPAN><A NAME="1900"></A>
and allow, for example, the state of the object to be indicated
by different colour sets while keeping the interface at an
abstract level and the drawing engine completely ignorant
<TR><TD ALIGN="LEFT">Style name</TD>
<TD ALIGN="LEFT">Description</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>frame</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>frame</TT>'</TD>
<TD ALIGN="LEFT">Style for frames.
- Substyle attributes: <TT>active</TT>/<TT>inactive</TT>
+ Substyle attributes: `<TT>active</TT>'/`<TT>inactive</TT>'
(mutually exclusive) and
- <TT>quasiactive</TT>/<TT>not_quasiactive</TT>.
+ `<TT>quasiactive</TT>'/`<TT>not_quasiactive</TT>'.
A frame is ``quasiactive'' when an active region
- has a backlink to it, such as a detached window.</TD>
+ has a back-link to it, such as a detached window.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>frame-tiled</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>frame-tiled</TT>'</TD>
<TD ALIGN="LEFT">A more specific style for tiled frames.
- Substyle attributes as for <TT>frame</TT>.</TD>
+ Substyle attributes as for `<TT>frame</TT>'.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>frame-tiled-alt</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>frame-tiled-alt</TT>'</TD>
<TD ALIGN="LEFT">An alternative style for tiled frames.
Often used to disable the tab-bar.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>frame-floating</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>frame-floating</TT>'</TD>
<TD ALIGN="LEFT">A more specific style for floating
frames.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>frame-transient</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>frame-transient</TT>'</TD>
<TD ALIGN="LEFT">A more specific style for frames
containing transient windows.</TD>
</TR>
<TR><TD ALIGN="LEFT">Style name</TD>
<TD ALIGN="LEFT">Description</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>tab</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>tab</TT>'</TD>
<TD ALIGN="LEFT">Style for frames' tabs and menu entries.
Substyle attributes:
- <TT>active</TT>/<TT>inactive</TT> and
- <TT>selected</TT>/<TT>unselected</TT></TD>
+ `<TT>active</TT>'/`<TT>inactive</TT>' and
+ `<TT>selected</TT>'/`<TT>unselected</TT>'</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>tab-frame</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>tab-frame</TT>'</TD>
<TD ALIGN="LEFT">A more specific style for frames' tabs.
Additional substyle attributes include:
- <TT>tagged</TT>/<TT>not_tagged</TT>,
- <TT>dragged</TT>/<TT>not_dragged</TT>,
- <TT>activity</TT>/<TT>no_activity</TT> and
- <TT>quasiactive</TT>/<TT>not_quasiactive</TT>.</TD>
+ `<TT>tagged</TT>'/`<TT>not_tagged</TT>',
+ `<TT>dragged</TT>'/`<TT>not_dragged</TT>',
+ `<TT>activity</TT>'/`<TT>no_activity</TT>',
+ `<TT>quasiactive</TT>'/`<TT>not_quasiactive</TT>'.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>tab-frame-tiled</TT>,</TD>
+<TR><TD ALIGN="LEFT">`<TT>tab-frame-tiled</TT>',</TD>
<TD ALIGN="LEFT"> </TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>tab-frame-tiled-alt</TT>,</TD>
+<TR><TD ALIGN="LEFT">`<TT>tab-frame-tiled-alt</TT>',</TD>
<TD ALIGN="LEFT"> </TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>tab-frame-floating</TT>,</TD>
+<TR><TD ALIGN="LEFT">`<TT>tab-frame-floating</TT>',</TD>
<TD ALIGN="LEFT"> </TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>tab-frame-transient</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>tab-frame-transient</TT>'</TD>
<TD ALIGN="LEFT">More specific styles for frames in the
different modes.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>tab-menuentry</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>tab-menuentry</TT>'</TD>
<TD ALIGN="LEFT">A more specific style for entries in WMenus.
- Additional substyle attributes include <TT>submenu</TT> and
- occasionally also <TT>activity</TT> is used.</TD>
+ Additional substyle attributes include `<TT>submenu</TT>' and
+ occasionally also `<TT>activity</TT>' is used.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>tab-menuentry-bigmenu</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>tab-menuentry-bigmenu</TT>'</TD>
<TD ALIGN="LEFT">An alternate style for entries in WMenus.</TD>
</TR>
</TABLE>
<TR><TD ALIGN="LEFT">Style name</TD>
<TD ALIGN="LEFT">Description</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>input</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>input</TT>'</TD>
<TD ALIGN="LEFT">A style for WInputs.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>input-edln</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>input-edln</TT>'</TD>
<TD ALIGN="LEFT">A more specific style for WEdlns.
- Substyle attributes: <TT>selection</TT> for selected text and
- <TT>cursor</TT> for the cursor indicating current editing point.</TD>
+ Substyle attributes: `<TT>selection</TT>' for selected text and
+ `<TT>cursor</TT>' for the cursor indicating current editing point.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>input-message</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>input-message</TT>'</TD>
<TD ALIGN="LEFT">A more specific style for WMessages.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>input-menu</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>input-menu</TT>'</TD>
<TD ALIGN="LEFT">A more specific style for WMenus.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>input-menu-bigmenu</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>input-menu-bigmenu</TT>'</TD>
<TD ALIGN="LEFT">An alternate style for WMenus.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>moveres_display</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>moveres_display</TT>'</TD>
<TD ALIGN="LEFT">The box displaying position/size when
moving or resizing frames.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><TT>dock</TT></TD>
+<TR><TD ALIGN="LEFT">`<TT>stdisp</TT>'</TD>
+<TD ALIGN="LEFT">Any status display.</TD>
+</TR>
+<TR><TD ALIGN="LEFT">`<TT>stdisp-dock</TT>'</TD>
<TD ALIGN="LEFT">The dock.</TD>
</TR>
+<TR><TD ALIGN="LEFT">`<TT>stdisp-statusbar</TT>'</TD>
+<TD ALIGN="LEFT">The statusbar. Substyles include:
+ the name of any monitor/meter (such as `<TT>date</TT>'), and
+ the supplied hint. Typical hints are: `<TT>normal</TT>',
+ `<TT>important</TT>', and `<TT>critical</TT>'.</TD>
+</TR>
</TABLE>
<P>
<P>
The <A HREF="node7.html#fn:gr.select_engine"><TT>gr.select_engine</TT></A> function sees if the engine
given as argument is registered (the default drawing engine is
-simply called ''de''). If the engine could not be found, it
+simply called ``de''). If the engine could not be found, it
tries to load a module of the same name. If the engine still
-is not registered, <A HREF="node7.html#fn:gr.select_engine"><TT>gr.select_engine</TT></A> returns <TT>false</TT>
+is not registered, <A HREF="node7.html#fn:gr.select_engine"><TT>gr.select_engine</TT></A> returns `<TT>false</TT>'
and in this case we also exit the style setup script.
If the engine was found, <A HREF="node7.html#fn:gr.select_engine"><TT>gr.select_engine</TT></A> sees that
further requests for brushes are forwarded to that engine
-and returns <TT>true</TT>.
+and returns `<TT>true</TT>'.
<P>
Before defining new styles it may be a good idea to clear old
<P>
-<DIV ALIGN="CENTER"><A NAME="fig:borders"></A><A NAME="1817"></A>
+<DIV ALIGN="CENTER"><A NAME="fig:borders"></A><A NAME="2003"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 4.1:</STRONG>
Sketch of different border styles and elements</CAPTION>
<TD ALIGN="LEFT">Description</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>highlight_colour</TT></TD>
-<TD ALIGN="LEFT">Colour for the ''highlight'' part of a border.</TD>
+<TD ALIGN="LEFT">Colour for the ``highlight'' part of a border.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>shadow_colour</TT></TD>
-<TD ALIGN="LEFT">Colour for the ''highlight'' part of a border.</TD>
+<TD ALIGN="LEFT">Colour for the ``shadow'' part of a border.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>foreground_colour</TT></TD>
<TD ALIGN="LEFT">Colour for the normal drawing operations, e.g. text.</TD>
background colour boxes.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>padding_colour</TT></TD>
-<TD ALIGN="LEFT">Colour for the ''padding'' part of a border border. Set to
+<TD ALIGN="LEFT">Colour for the ``padding'' part of a border border. Set to
<TT>background_colour</TT> if unset.</TD>
</TR>
</TABLE>
</TR>
<TR><TD ALIGN="LEFT"><TT>border_style</TT></TD>
<TD ALIGN="LEFT">A string indicating the style of border; one of
- elevated/inlaid/ridge/groove as seen in the
- above sketch.</TD>
+ `<TT>elevated</TT>'/`<TT>inlaid</TT>'/`<TT>ridge</TT>'/`<TT>groove</TT>'
+ as seen in the above sketch.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>border_sides</TT></TD>
<TD ALIGN="LEFT">A string indicating which sides of the border
- to draw: all/tb/lr for all, top and bottom, and
- left and right. To control between left/right
- and top/bottom, use the pixel options below.</TD>
+ to draw: `<TT>all</TT>'/`<TT>tb</TT>'/`<TT>lr</TT>' for all,
+ top and bottom, and left and right. To control between
+ left/right and top/bottom, use the pixel options below.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>highlight_pixels</TT></TD>
<TD ALIGN="LEFT">Width of the highlight part of the border in pixels.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>text_align</TT></TD>
<TD ALIGN="LEFT">How text is to be aligned in text boxes/tabs; one of
- the strings left/right/center.</TD>
+ the strings `<TT>left</TT>'/`<TT>right</TT>'/`<TT>center</TT>'.</TD>
</TR>
</TABLE>
<P>
As discussed in previous sections, styles may have substyles to e.g.
-indicate different states of the object being drawn. The ''de'' engine
+indicate different states of the object being drawn. The ``de'' engine
limits what can be configured in substyles to the set of colours in the
first table above, but also specifically interprets for the main style
-<TT>tab-frame</TT> the substyles <TT>*-*-tagged</TT> and <TT>*-*-*-dragged</TT>
+`<TT>tab-frame</TT>' the substyles `<TT>*-*-tagged</TT>' and `<TT>*-*-*-dragged</TT>'
by, respectively, drawing a right angle shape at the top right corner
of a tab and by shading the tab with a stipple pattern. Also for
-menus the substyles <TT>*-*-submenu</TT> are handled as a special case.
+menus the substyles `<TT>*-*-submenu</TT>' are handled as a special case.
<P>
Substyles are defined with the function <A HREF="node7.html#fn:de.substyle"><TT>de.substyle</TT></A> within the
<P>
-<H2><A NAME="SECTION00530000000000000000">
-<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings</A>
+<H2><A NAME="SECTION00530000000000000000"></A>
+<A NAME="sec:grmisc"></A>
+<BR>
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN> Miscellaneous settings
</H2>
<P>
-The following style fields are independent of the drawing engine used,
-but are related to objects' styles and therefore configured in the drawing
-engine configuration file.
+
+<H3><A NAME="SECTION00531000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Frame user attributes</A>
+</H3>
<P>
+The function <A HREF="node7.html#fn:WFrame.set_grattr"><TT>WFrame.set_grattr</TT></A> may be used to give frames
+(and their tabs) arbitrary extra attributes to be passed to the
+drawing engine. Hence, by configuring such substyles in the style
+configuration files, and turning on the attribute when needed,
+scripts may display visual cues related to the frame. There is
+also one extra attribute specially interpreted by the default
+drawing engine: the `<TT>numbered</TT>' attribute, which causes
+numbers to be displayed on the tabs.
-<H3><A NAME="SECTION00531000000000000000">
-<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> Extra fields for style <TT>frame</TT></A>
+<P>
+
+<H3><A NAME="SECTION00532000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style `<TT>frame</TT>'</A>
</H3>
+<P>
+The following style fields are independent of the drawing engine used,
+but are related to objects' styles and therefore configured in the drawing
+engine configuration file.
+
<P>
<TABLE CELLPADDING=3 BORDER="1" WIDTH="100%">
<TR><TD ALIGN="LEFT">Field</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>bar</TT></TD>
<TD ALIGN="LEFT">Controls the style of the tab-bar. Possible values
- are the strings <TT>"none"</TT>, <TT>"inside"</TT>, <TT>"outside"</TT>
- and <TT>"shaped"</TT>, with the last providing the PWM-style
+ are the strings `<TT>none</TT>', `<TT>inside</TT>', `<TT>outside</TT>'
+ and `<TT>shaped</TT>', with the last providing the PWM-style
tab-bars for floating frames.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>floatframe_tab_min_w</TT></TD>
<TR><TD ALIGN="LEFT"><TT>floatframe_bar_max_w_q</TT></TD>
<TD ALIGN="LEFT">Maximum tab-bar width quotient of
frame width for the shaped styles. A number in the
- interval <SPAN CLASS="MATH"></SPAN>.</TD>
+ interval <SPAN CLASS="MATH"><IMG
+ WIDTH="42" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
+ SRC="img3.png"
+ ALT="$(0, 1]$"></SPAN>.</TD>
</TR>
</TABLE>
<P>
-<H3><A NAME="SECTION00532000000000000000">
-<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> Extra fields for style <TT>dock</TT></A>
+<H3><A NAME="SECTION00533000000000000000">
+<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> Extra fields for style `<TT>dock</TT>'</A>
</H3>
<P>
</TR>
<TR><TD ALIGN="LEFT"><TT>outline_style</TT></TD>
<TD ALIGN="LEFT">How borders are drawn:
- <TT>"none"</TT> - no border,
- <TT>"all"</TT> - border around whole dock,
- <TT>"each"</TT> - border around each dockapp.</TD>
+ `<TT>none</TT>' - no border,
+ `<TT>all</TT>' - border around whole dock,
+ `<TT>each</TT>' - border around each dockapp.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>tile_size</TT></TD>
-<TD ALIGN="LEFT">A table with entries <TT>width</TT> and <TT>height</TT>,
+<TD ALIGN="LEFT">A table with entries `<TT>width</TT>' and `<TT>height</TT>',
indicating the width and height of tiles in pixels.</TD>
</TR>
</TABLE>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
-<A NAME="tex2html304"
+<A NAME="tex2html331"
HREF="node6.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html298"
+<A NAME="tex2html325"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html292"
+<A NAME="tex2html319"
HREF="node4.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html300"
+<A NAME="tex2html327"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html302"
+<A NAME="tex2html329"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html305"
+<B> Next:</B> <A NAME="tex2html332"
HREF="node6.html">5. Scripting</A>
-<B> Up:</B> <A NAME="tex2html299"
+<B> Up:</B> <A NAME="tex2html326"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html293"
+<B> Previous:</B> <A NAME="tex2html320"
HREF="node4.html">3. Basic configuration</A>
- <B> <A NAME="tex2html301"
+ <B> <A NAME="tex2html328"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html303"
+ <B> <A NAME="tex2html330"
HREF="node11.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html335"
+<A NAME="tex2html363"
HREF="node7.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html329"
+<A NAME="tex2html357"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html323"
+<A NAME="tex2html351"
HREF="node5.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html331"
+<A NAME="tex2html359"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html333"
+<A NAME="tex2html361"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html336"
+<B> Next:</B> <A NAME="tex2html364"
HREF="node7.html">6. Function reference</A>
-<B> Up:</B> <A NAME="tex2html330"
+<B> Up:</B> <A NAME="tex2html358"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html324"
+<B> Previous:</B> <A NAME="tex2html352"
HREF="node5.html">4. Graphical styles</A>
- <B> <A NAME="tex2html332"
+ <B> <A NAME="tex2html360"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html334"
+ <B> <A NAME="tex2html362"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL CLASS="ChildLinks">
-<LI><A NAME="tex2html337"
+<LI><A NAME="tex2html365"
HREF="node6.html#SECTION00610000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> Hooks</A>
-<LI><A NAME="tex2html338"
+<LI><A NAME="tex2html366"
HREF="node6.html#SECTION00620000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN> Referring to regions</A>
<UL>
-<LI><A NAME="tex2html339"
+<LI><A NAME="tex2html367"
HREF="node6.html#SECTION00621000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Direct object references</A>
-<LI><A NAME="tex2html340"
+<LI><A NAME="tex2html368"
HREF="node6.html#SECTION00622000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> Name-based lookups</A>
</UL>
<BR>
-<LI><A NAME="tex2html341"
+<LI><A NAME="tex2html369"
HREF="node6.html#SECTION00630000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN> Alternative winprop selection criteria</A>
-<LI><A NAME="tex2html342"
+<LI><A NAME="tex2html370"
HREF="node6.html#SECTION00640000000000000000"><SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors</A>
</UL>
<!--End of Table of Child-Links-->
<P>
This chapter documents some additional features of the Ion configuration
and scripting interface that can be used for more advanced scripting than
-the basic configuration exlained in chapter <A HREF="node4.html#chap:config">3</A>.
+the basic configuration explained in chapter <A HREF="node4.html#chap:config">3</A>.
<P>
<P>
Hooks are lists of functions to be called when a certain event occurs.
-There are two types of them; normal and ''alternative'' hooks. Normal
+There are two types of them; normal and ``alternative'' hooks. Normal
hooks do not return anything, but alt-hooks should return a boolean
-indicating whether it handled its assigned task succesfully. In the case
+indicating whether it handled its assigned task successfully. In the case
that <TT>true</TT> is returned, remaining handlers are not called.
<P>
Hook handlers are registered by first finding the hook
-with <A HREF="#fn:ioncore.get_hook"><TT>ioncore.get_hook</TT></A> and then calling <A HREF="#fn:WHook.add"><TT>WHook.add</TT></A>
-on the (succesfull) result with the handler as parameter. Similarly
-handlers are unregistered with <A HREF="#fn:WHook.remove"><TT>WHook.remove</TT></A>. For example:
+with <A HREF="node7.html#fn:ioncore.get_hook"><TT>ioncore.get_hook</TT></A> and then calling <A HREF="node7.html#fn:WHook.add"><TT>WHook.add</TT></A>
+on the (successful) result with the handler as parameter. Similarly
+handlers are unregistered with <A HREF="node7.html#fn:WHook.remove"><TT>WHook.remove</TT></A>. For example:
<P>
<PRE>
the hook reference, section <A HREF="node7.html#sec:hookref">6.9</A>.
<P>
-Note that many of the hooks are called in ''protected mode'' and can not
+Note that many of the hooks are called in ``protected mode'' and can not
use any functions that modify Ion's internal state. TODO: More detailed
documentation when this is final.
</H3>
<P>
-All Ion objects are passed to Lua scriptss as 'userdatas', and you may
+All Ion objects are passed to Lua scripts as 'userdatas', and you may
safely store such object references for future use. The C-side object
may be destroyed while Lua still refers to the object. All exported
functions gracefully fail in such a case, but if you need to explicitly
<P>
-<H2><A NAME="SECTION00640000000000000000">
-<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors</A>
+<H2><A NAME="SECTION00640000000000000000"></A>
+<A NAME="sec:statusd"></A>
+<BR>
+<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">4</SPAN> Writing <TT>ion-statusd</TT> monitors
</H2>
<P>
go in the separate <TT>ion-statusd</TT> program.
<P>
-Whenever the user requests a meter <TT>%foo</TT> or <TT>%foo_bar</TT> to be
-inserted in a statusbar, <SPAN CLASS="textit">mod_statusbar</SPAN> asks <TT>ion-statusd</TT> to
-load <A HREF="#fn:statusd_foo.lua"><TT>statusd_foo.lua</TT></A> on its search path (same as that for Ion-side
+Whenever the user requests a meter `<TT>%foo</TT>' or `<TT>%foo_bar</TT>' to
+be inserted in a statusbar, <SPAN CLASS="textit">mod_statusbar</SPAN> asks <TT>ion-statusd</TT>
+to load <A HREF="#fn:statusd_foo.lua"><TT>statusd_foo.lua</TT></A> on its search path (same as that for Ion-side
scripts). This script should then supply all meters with the initial part
-'<TT>foo</TT>'.
+`<TT>foo</TT>'.
<P>
To provide this value, the script should simply call <TT>statusd.inform</TT>
facilitate expected width calculation by <SPAN CLASS="textit">mod_statusbar</SPAN>, and
may provide a 'hint' for colour-coding the value. The interpretation
of hints depends on the graphical style in use, and currently the
-stock styles support the <TT>normal</TT>, <TT>important</TT> and
-<TT>critical</TT> hints.
+stock styles support the `<TT>normal</TT>', `<TT>important</TT>' and
+`<TT>critical</TT>' hints.
<P>
-In our example of the 'foo monitor', at script init we might broadcast
+In our example of the 'foo monitor', at script initialisation we might broadcast
the template as follows:
<P>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
-<A NAME="tex2html335"
+<A NAME="tex2html363"
HREF="node7.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html329"
+<A NAME="tex2html357"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html323"
+<A NAME="tex2html351"
HREF="node5.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html331"
+<A NAME="tex2html359"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html333"
+<A NAME="tex2html361"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html336"
+<B> Next:</B> <A NAME="tex2html364"
HREF="node7.html">6. Function reference</A>
-<B> Up:</B> <A NAME="tex2html330"
+<B> Up:</B> <A NAME="tex2html358"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html324"
+<B> Previous:</B> <A NAME="tex2html352"
HREF="node5.html">4. Graphical styles</A>
- <B> <A NAME="tex2html332"
+ <B> <A NAME="tex2html360"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html334"
+ <B> <A NAME="tex2html362"
HREF="node11.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html355"
+<A NAME="tex2html383"
HREF="node8.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html349"
+<A NAME="tex2html377"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html343"
+<A NAME="tex2html371"
HREF="node6.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html351"
+<A NAME="tex2html379"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html353"
+<A NAME="tex2html381"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html356"
+<B> Next:</B> <A NAME="tex2html384"
HREF="node8.html">A. The GNU General</A>
-<B> Up:</B> <A NAME="tex2html350"
+<B> Up:</B> <A NAME="tex2html378"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html344"
+<B> Previous:</B> <A NAME="tex2html372"
HREF="node6.html">5. Scripting</A>
- <B> <A NAME="tex2html352"
+ <B> <A NAME="tex2html380"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html354"
+ <B> <A NAME="tex2html382"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL CLASS="ChildLinks">
-<LI><A NAME="tex2html357"
+<LI><A NAME="tex2html385"
HREF="node7.html#SECTION00710000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN> Functions defined in <SPAN CLASS="textit">ioncore</SPAN></A>
<UL>
-<LI><A NAME="tex2html358"
+<LI><A NAME="tex2html386"
HREF="node7.html#SECTION00711000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN> WClientWin functions</A>
-<LI><A NAME="tex2html359"
+<LI><A NAME="tex2html387"
HREF="node7.html#SECTION00712000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN> WFrame functions</A>
-<LI><A NAME="tex2html360"
+<LI><A NAME="tex2html388"
HREF="node7.html#SECTION00713000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">3</SPAN> WGroup functions</A>
-<LI><A NAME="tex2html361"
+<LI><A NAME="tex2html389"
HREF="node7.html#SECTION00714000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">4</SPAN> WGroupCW functions</A>
-<LI><A NAME="tex2html362"
+<LI><A NAME="tex2html390"
HREF="node7.html#SECTION00715000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">5</SPAN> WGroupWS functions</A>
-<LI><A NAME="tex2html363"
- HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
-<LI><A NAME="tex2html364"
- HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
-<LI><A NAME="tex2html365"
- HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
-<LI><A NAME="tex2html366"
- HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
-<LI><A NAME="tex2html367"
- HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
-<LI><A NAME="tex2html368"
- HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
-<LI><A NAME="tex2html369"
- HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
-<LI><A NAME="tex2html370"
- HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
-<LI><A NAME="tex2html371"
- HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
-<LI><A NAME="tex2html372"
- HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
-<LI><A NAME="tex2html373"
- HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
+<LI><A NAME="tex2html391"
+ HREF="node7.html#SECTION00716000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WHook functions</A>
+<LI><A NAME="tex2html392"
+ HREF="node7.html#SECTION00717000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WInfoWin functions</A>
+<LI><A NAME="tex2html393"
+ HREF="node7.html#SECTION00718000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMPlex functions</A>
+<LI><A NAME="tex2html394"
+ HREF="node7.html#SECTION00719000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WMoveresMode functions</A>
+<LI><A NAME="tex2html395"
+ HREF="node7.html#SECTION007110000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRegion functions</A>
+<LI><A NAME="tex2html396"
+ HREF="node7.html#SECTION007111000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WRootWin functions</A>
+<LI><A NAME="tex2html397"
+ HREF="node7.html#SECTION007112000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WScreen functions</A>
+<LI><A NAME="tex2html398"
+ HREF="node7.html#SECTION007113000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> WTimer functions</A>
+<LI><A NAME="tex2html399"
+ HREF="node7.html#SECTION007114000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> WWindow functions</A>
+<LI><A NAME="tex2html400"
+ HREF="node7.html#SECTION007115000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> global functions</A>
+<LI><A NAME="tex2html401"
+ HREF="node7.html#SECTION007116000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> gr functions</A>
+<LI><A NAME="tex2html402"
+ HREF="node7.html#SECTION007117000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">17</SPAN> string functions</A>
+<LI><A NAME="tex2html403"
+ HREF="node7.html#SECTION007118000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">18</SPAN> table functions</A>
</UL>
<BR>
-<LI><A NAME="tex2html374"
+<LI><A NAME="tex2html404"
HREF="node7.html#SECTION00720000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN> Functions defined in <SPAN CLASS="textit">mod_tiling</SPAN></A>
<UL>
-<LI><A NAME="tex2html375"
+<LI><A NAME="tex2html405"
HREF="node7.html#SECTION00721000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> WSplit functions</A>
-<LI><A NAME="tex2html376"
+<LI><A NAME="tex2html406"
HREF="node7.html#SECTION00722000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN> WSplitInner functions</A>
-<LI><A NAME="tex2html377"
+<LI><A NAME="tex2html407"
HREF="node7.html#SECTION00723000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">3</SPAN> WSplitRegion functions</A>
-<LI><A NAME="tex2html378"
+<LI><A NAME="tex2html408"
HREF="node7.html#SECTION00724000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">4</SPAN> WSplitSplit functions</A>
-<LI><A NAME="tex2html379"
+<LI><A NAME="tex2html409"
HREF="node7.html#SECTION00725000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">5</SPAN> WTiling functions</A>
</UL>
<BR>
-<LI><A NAME="tex2html380"
+<LI><A NAME="tex2html410"
HREF="node7.html#SECTION00730000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN> Functions defined in <SPAN CLASS="textit">mod_query</SPAN></A>
<UL>
-<LI><A NAME="tex2html381"
+<LI><A NAME="tex2html411"
HREF="node7.html#SECTION00731000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN> WComplProxy functions</A>
-<LI><A NAME="tex2html382"
+<LI><A NAME="tex2html412"
HREF="node7.html#SECTION00732000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN> WEdln functions</A>
-<LI><A NAME="tex2html383"
+<LI><A NAME="tex2html413"
HREF="node7.html#SECTION00733000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN> WInput functions</A>
</UL>
<BR>
-<LI><A NAME="tex2html384"
+<LI><A NAME="tex2html414"
HREF="node7.html#SECTION00740000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN> Functions defined in <SPAN CLASS="textit">mod_menu</SPAN></A>
<UL>
-<LI><A NAME="tex2html385"
+<LI><A NAME="tex2html415"
HREF="node7.html#SECTION00741000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN> WMenu functions</A>
</UL>
<BR>
-<LI><A NAME="tex2html386"
+<LI><A NAME="tex2html416"
HREF="node7.html#SECTION00750000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN> Functions defined in <SPAN CLASS="textit">mod_dock</SPAN></A>
<UL>
-<LI><A NAME="tex2html387"
+<LI><A NAME="tex2html417"
HREF="node7.html#SECTION00751000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">1</SPAN> WDock functions</A>
</UL>
<BR>
-<LI><A NAME="tex2html388"
+<LI><A NAME="tex2html418"
HREF="node7.html#SECTION00760000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">6</SPAN> Functions defined in <SPAN CLASS="textit">mod_sp</SPAN></A>
-<LI><A NAME="tex2html389"
+<LI><A NAME="tex2html419"
HREF="node7.html#SECTION00770000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN> Functions defined in <SPAN CLASS="textit">mod_statusbar</SPAN></A>
<UL>
-<LI><A NAME="tex2html390"
+<LI><A NAME="tex2html420"
HREF="node7.html#SECTION00771000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">7</SPAN>.<SPAN CLASS="arabic">1</SPAN> WStatusBar functions</A>
</UL>
<BR>
-<LI><A NAME="tex2html391"
+<LI><A NAME="tex2html421"
HREF="node7.html#SECTION00780000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">8</SPAN> Functions defined in <SPAN CLASS="textit">de</SPAN></A>
-<LI><A NAME="tex2html392"
+<LI><A NAME="tex2html422"
HREF="node7.html#SECTION00790000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN> Hooks</A>
-</UL>
+<LI><A NAME="tex2html423"
+ HREF="node7.html#SECTION007100000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> Miscellaneous</A>
+<UL>
+<LI><A NAME="tex2html424"
+ HREF="node7.html#SECTION007101000000000000000"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN>.<SPAN CLASS="arabic">1</SPAN> Size policies</A>
+</UL></UL>
<!--End of Table of Child-Links-->
<HR>
</H2>
<DL>
-<DD><A NAME="4362"></A>
-<A NAME="4363"></A>
-<A NAME="fn:ioncore.TR"></A>
+<DD><A NAME="fn:ioncore.TR"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.TR(s, ...)</TT>
<P>
<DL>
-<DD><A NAME="4364"></A>
-<A NAME="4365"></A>
-<A NAME="fn:ioncore.bdoc"></A>
+<DD><A NAME="fn:ioncore.bdoc"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.bdoc(text)</TT>
<P>
<DL>
-<DD><A NAME="4366"></A>
-<A NAME="4367"></A>
-<A NAME="fn:ioncore.chdir_for"></A>
+<DD><A NAME="fn:ioncore.chdir_for"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.chdir_for(reg, dir)</TT>
<P>
<DL>
-<DD><A NAME="4368"></A>
-<A NAME="4369"></A>
-<A NAME="fn:ioncore.compile_cmd"></A>
+<DD><A NAME="fn:ioncore.compile_cmd"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.compile_cmd(cmd, guard)</TT>
<P>
<DL>
-<DD><A NAME="4370"></A>
-<A NAME="4371"></A>
-<A NAME="fn:ioncore.create_ws"></A>
+<DD><A NAME="fn:ioncore.create_timer"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>WTimer ioncore.create_timer()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a new timer.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:ioncore.create_ws"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.create_ws(scr, tmpl, layout)</TT>
<P>
<DL>
-<DD><A NAME="4372"></A>
-<A NAME="4373"></A>
-<A NAME="fn:ioncore.defbindings"></A>
+<DD><A NAME="fn:ioncore.defbindings"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.defbindings(context, bindings)</TT>
<P>
<DL>
-<DD><A NAME="4374"></A>
-<A NAME="4375"></A>
-<A NAME="fn:ioncore.defctxmenu"></A>
+<DD><A NAME="fn:ioncore.defctxmenu"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.defctxmenu(ctx, ...)</TT>
<P>
<DL>
-<DD><A NAME="4376"></A>
-<A NAME="4377"></A>
-<A NAME="fn:ioncore.deflayout"></A>
+<DD><A NAME="fn:ioncore.deflayout"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.deflayout(name, tab)</TT>
<P>
<DL>
-<DD><A NAME="4378"></A>
-<A NAME="4379"></A>
-<A NAME="fn:ioncore.defmenu"></A>
+<DD><A NAME="fn:ioncore.defmenu"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.defmenu(name, tab)</TT>
<P>
<DL>
-<DD><A NAME="4380"></A>
-<A NAME="4381"></A>
-<A NAME="fn:ioncore.defwinprop"></A>
+<DD><A NAME="fn:ioncore.defwinprop"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.defwinprop(list)</TT>
<P>
<DL>
-<DD><A NAME="4382"></A>
-<A NAME="4383"></A>
-<A NAME="fn:ioncore.exec_on"></A>
+<DD><A NAME="fn:ioncore.exec_on"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.exec_on(reg, cmd, merr_internal)</TT>
<P>
<DL>
-<DD><A NAME="4384"></A>
-<A NAME="4385"></A>
-<A NAME="fn:ioncore.read_savefile"></A>
+<DD><A NAME="fn:ioncore.read_savefile"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table ioncore.read_savefile(string basename)</TT>
<P>
<DL>
-<DD><A NAME="4386"></A>
-<A NAME="4387"></A>
-<A NAME="fn:ioncore.get_savefile"></A>
+<DD><A NAME="fn:ioncore.get_savefile"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string ioncore.get_savefile(string basename)</TT>
<P>
<DL>
-<DD><A NAME="4388"></A>
-<A NAME="4389"></A>
-<A NAME="fn:ioncore.lookup_script"></A>
+<DD><A NAME="fn:ioncore.lookup_script"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string ioncore.lookup_script(string file, string sp)</TT>
<P>
<DL>
-<DD><A NAME="4390"></A>
-<A NAME="4391"></A>
-<A NAME="fn:ioncore.write_savefile"></A>
+<DD><A NAME="fn:ioncore.write_savefile"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.write_savefile(string basename, table tab)</TT>
<P>
<DL>
-<DD><A NAME="4392"></A>
-<A NAME="4393"></A>
-<A NAME="fn:ioncore.find_manager"></A>
+<DD><A NAME="fn:ioncore.find_manager"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.find_manager(obj, t)</TT>
<P>
<DL>
-<DD><A NAME="4394"></A>
-<A NAME="4395"></A>
-<A NAME="fn:ioncore.get_dir_for"></A>
+<DD><A NAME="fn:ioncore.get_dir_for"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.get_dir_for(reg)</TT>
<P>
<DL>
-<DD><A NAME="4396"></A>
-<A NAME="4397"></A>
-<A NAME="fn:ioncore.getbindings"></A>
+<DD><A NAME="fn:ioncore.getbindings"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.getbindings(maybe_context)</TT>
<P>
<DL>
-<DD><A NAME="4398"></A>
-<A NAME="4399"></A>
-<A NAME="fn:ioncore.getctxmenu"></A>
+<DD><A NAME="fn:ioncore.getctxmenu"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.getctxmenu(name)</TT>
<P>
<DL>
-<DD><A NAME="4400"></A>
-<A NAME="4401"></A>
-<A NAME="fn:ioncore.getlayout"></A>
+<DD><A NAME="fn:ioncore.getlayout"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.getlayout(name, all)</TT>
<P>
<DL>
-<DD><A NAME="4402"></A>
-<A NAME="4403"></A>
-<A NAME="fn:ioncore.getmenu"></A>
+<DD><A NAME="fn:ioncore.getmenu"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.getmenu(name)</TT>
<P>
<DL>
-<DD><A NAME="4404"></A>
-<A NAME="4405"></A>
-<A NAME="fn:ioncore.getwinprop"></A>
+<DD><A NAME="fn:ioncore.getwinprop"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.getwinprop(cwin)</TT>
<P>
<DL>
-<DD><A NAME="4406"></A>
-<A NAME="4407"></A>
-<A NAME="fn:ioncore.aboutmsg"></A>
+<DD><A NAME="fn:ioncore.aboutmsg"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string ioncore.aboutmsg()</TT>
<P>
<DL>
-<DD><A NAME="4408"></A>
-<A NAME="4409"></A>
-<A NAME="fn:ioncore.activity_first"></A>
+<DD><A NAME="fn:ioncore.activity_first"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion ioncore.activity_first()</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Return first regio non activity list.
+<DD>Returns first region on activity list.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4410"></A>
-<A NAME="4411"></A>
-<A NAME="fn:ioncore.activity_i"></A>
+<DD><A NAME="fn:ioncore.activity_i"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.activity_i(function iterfn)</TT>
<P>
<DL>
-<DD><A NAME="4412"></A>
-<A NAME="4413"></A>
-<A NAME="fn:ioncore.clientwin_i"></A>
+<DD><A NAME="fn:ioncore.clientwin_i"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.clientwin_i(function fn)</TT>
<P>
<DL>
-<DD><A NAME="4414"></A>
-<A NAME="4415"></A>
-<A NAME="fn:ioncore.current"></A>
+<DD><A NAME="fn:ioncore.current"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion ioncore.current()</TT>
<P>
<DL>
-<DD><A NAME="4416"></A>
-<A NAME="4417"></A>
-<A NAME="fn:ioncore.defshortening"></A>
+<DD><A NAME="fn:ioncore.defshortening"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.defshortening(string rx, string rule, bool always)</TT>
<P>
<DL>
-<DD><A NAME="4418"></A>
-<A NAME="4419"></A>
-<A NAME="fn:ioncore.detach"></A>
+<DD><A NAME="fn:ioncore.detach"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.detach(WRegion reg, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Detach or reattach <TT>reg</TT>, depending on whether <TT>how</TT>
- is 'set'/'unset'/'toggle'. (Detaching means making <TT>reg</TT>
- managed by its nearest ancestor WGroup, framed if <TT>reg</TT> is
- not itself WFrame. Reattaching means making it managed where
- it used to be managed, if a return-placeholder exists.)
- If <TT>reg</TT> is the 'bottom' of some group, the whole group is
+ is `<TT>set</TT>', `<TT>unset</TT>' or `<TT>toggle</TT>'. (Detaching
+ means making <TT>reg</TT> managed by its nearest ancestor WGroup,
+ framed if <TT>reg</TT> is not itself WFrame. Reattaching means
+ making it managed where it used to be managed, if a return-placeholder
+ exists.)
+ If <TT>reg</TT> is the `bottom' of some group, the whole group is
detached. If <TT>reg</TT> is a WWindow, it is put into a
frame.
<P>
<DL>
-<DD><A NAME="4420"></A>
-<A NAME="4421"></A>
-<A NAME="fn:ioncore.exec"></A>
+<DD><A NAME="fn:ioncore.exec"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>integer ioncore.exec(string cmd)</TT>
<P>
<DL>
-<DD><A NAME="4422"></A>
-<A NAME="4423"></A>
-<A NAME="fn:ioncore.find_screen_id"></A>
+<DD><A NAME="fn:ioncore.find_screen_id"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WScreen ioncore.find_screen_id(integer id)</TT>
<P>
<DL>
-<DD><A NAME="4424"></A>
-<A NAME="4425"></A>
-<A NAME="fn:ioncore.focushistory_i"></A>
+<DD><A NAME="fn:ioncore.focushistory_i"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.focushistory_i(function iterfn)</TT>
<P>
<DL>
-<DD><A NAME="4426"></A>
-<A NAME="4427"></A>
-<A NAME="fn:ioncore.get"></A>
+<DD><A NAME="fn:ioncore.get"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table ioncore.get()</TT>
<P>
<DL>
-<DD><A NAME="4428"></A>
-<A NAME="4429"></A>
-<A NAME="fn:ioncore.get_paths"></A>
+<DD><A NAME="fn:ioncore.get_paths"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table ioncore.get_paths(table tab)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Get important directories (userdir, sessiondir, searchpath).
+<DD>Get important directories (the fields <TT>userdir</TT>,
+ <TT>sessiondir</TT>, <TT>searchpath</TT> in the returned table).
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4430"></A>
-<A NAME="4431"></A>
-<A NAME="fn:ioncore.goto_activity"></A>
+<DD><A NAME="fn:ioncore.goto_activity"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.goto_activity()</TT>
<P>
<DL>
-<DD><A NAME="4432"></A>
-<A NAME="4433"></A>
-<A NAME="fn:ioncore.goto_first"></A>
+<DD><A NAME="fn:ioncore.goto_first"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion ioncore.goto_first(WRegion reg, string dirstr, table param)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Go to first region within <TT>reg</TT> in direction <TT>dirstr</TT>
- (up/down/left/right/beg/end/any). For information on <TT>param</TT>,
- see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>. Additionally this function supports
- the boolean <TT>nofront</TT> field, for not bringing the object to
- front.
+<DD>Go to first region within <TT>reg</TT> in direction <TT>dirstr</TT>.
+ For information on <TT>param</TT>, see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>.
+ Additionally this function supports the boolean <TT>nofront</TT> field,
+ for not bringing the object to front.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4434"></A>
-<A NAME="4435"></A>
-<A NAME="fn:ioncore.goto_next"></A>
+<DD><A NAME="fn:ioncore.goto_next"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion ioncore.goto_next(WRegion reg, string dirstr, table param)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Go to region next from <TT>reg</TT> in direction <TT>dirstr</TT>
- (up/down/left/right/next/prev/any). For information on <TT>param</TT>,
- see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>. Additionally this function supports
- the boolean <TT>nofront</TT> field, for not bringing the object to
- front.
+<DD>Go to region next from <TT>reg</TT> in direction <TT>dirstr</TT>.
+ For information on <TT>param</TT>, see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>.
+ Additionally this function supports the boolean <TT>nofront</TT>
+ field, for not bringing the object to front.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4436"></A>
-<A NAME="4437"></A>
-<A NAME="fn:ioncore.goto_next_screen"></A>
+<DD><A NAME="fn:ioncore.goto_next_screen"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WScreen ioncore.goto_next_screen()</TT>
<P>
<DL>
-<DD><A NAME="4438"></A>
-<A NAME="4439"></A>
-<A NAME="fn:ioncore.goto_nth_screen"></A>
+<DD><A NAME="fn:ioncore.goto_nth_screen"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WScreen ioncore.goto_nth_screen(integer id)</TT>
<P>
<DL>
-<DD><A NAME="4440"></A>
-<A NAME="4441"></A>
-<A NAME="fn:ioncore.goto_prev_screen"></A>
+<DD><A NAME="fn:ioncore.goto_prev_screen"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WScreen ioncore.goto_prev_screen()</TT>
<P>
<DL>
-<DD><A NAME="4442"></A>
-<A NAME="4443"></A>
-<A NAME="fn:ioncore.goto_previous"></A>
+<DD><A NAME="fn:ioncore.goto_previous"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion ioncore.goto_previous()</TT>
<P>
<DL>
-<DD><A NAME="4444"></A>
-<A NAME="4445"></A>
-<A NAME="fn:ioncore.is_i18n"></A>
+<DD><A NAME="fn:ioncore.is_i18n"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.is_i18n()</TT>
<P>
<DL>
-<DD><A NAME="4446"></A>
-<A NAME="4447"></A>
-<A NAME="fn:ioncore.load_module"></A>
+<DD><A NAME="fn:ioncore.load_module"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.load_module(string modname)</TT>
<P>
<DL>
-<DD><A NAME="4448"></A>
-<A NAME="4449"></A>
-<A NAME="fn:ioncore.lookup_clientwin"></A>
+<DD><A NAME="fn:ioncore.lookup_clientwin"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WClientWin ioncore.lookup_clientwin(string name)</TT>
<P>
<DL>
-<DD><A NAME="4450"></A>
-<A NAME="4451"></A>
-<A NAME="fn:ioncore.lookup_region"></A>
+<DD><A NAME="fn:ioncore.lookup_region"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion ioncore.lookup_region(string name, string typenam)</TT>
<P>
<DL>
-<DD><A NAME="4452"></A>
-<A NAME="4453"></A>
-<A NAME="fn:ioncore.navi_first"></A>
+<DD><A NAME="fn:ioncore.navi_first"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion ioncore.navi_first(WRegion reg, string dirstr, table param)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Find first region within <TT>reg</TT> in direction <TT>dirstr</TT>
- (up/down/left/right/beg/end/any). For information on <TT>param</TT>,
- see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>.
+<DD>Find first region within <TT>reg</TT> in direction <TT>dirstr</TT>.
+ For information on <TT>param</TT>, see <A HREF="#fn:ioncore.navi_next"><TT>ioncore.navi_next</TT></A>.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4454"></A>
-<A NAME="4455"></A>
-<A NAME="fn:ioncore.navi_next"></A>
+<DD><A NAME="fn:ioncore.navi_next"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion ioncore.navi_next(WRegion reg, string dirstr, table param)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Find region next from <TT>reg</TT> in direction <TT>dirstr</TT>
- (up/down/left/right/next/prev/any). The table <TT>param</TT> may
- contain the boolean field <TT>nowrap</TT>, instructing not to wrap
+ (`<TT>up</TT>', `<TT>down</TT>', `<TT>left</TT>', `<TT>right</TT>',
+ `<TT>next</TT>', `<TT>prev</TT>', or `<TT>any</TT>'). The table <TT>param</TT>
+ may contain the boolean field <TT>nowrap</TT>, instructing not to wrap
around, and the WRegions <TT>no_ascend</TT> and <TT>no_descend</TT>,
and boolean functions <TT>ascend_filter</TT> and <TT>descend_filter</TT>
on <TT>WRegion</TT> pairs (<TT>to</TT>, <TT>from</TT>), are used to decide when
<P>
<DL>
-<DD><A NAME="4456"></A>
-<A NAME="4457"></A>
-<A NAME="fn:ioncore.popen_bgread"></A>
+<DD><A NAME="fn:ioncore.popen_bgread"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>integer ioncore.popen_bgread(string cmd, function h, function errh)</TT>
<P>
<DL>
-<DD><A NAME="4458"></A>
-<A NAME="4459"></A>
-<A NAME="fn:ioncore.progname"></A>
+<DD><A NAME="fn:ioncore.progname"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string ioncore.progname()</TT>
<P>
<DL>
-<DD><A NAME="4460"></A>
-<A NAME="4461"></A>
-<A NAME="fn:ioncore.region_i"></A>
+<DD><A NAME="fn:ioncore.region_i"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.region_i(function fn, string typenam)</TT>
<P>
<DL>
-<DD><A NAME="4462"></A>
-<A NAME="4463"></A>
-<A NAME="fn:ioncore.request_selection"></A>
+<DD><A NAME="fn:ioncore.request_selection"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.request_selection(function fn)</TT>
<P>
<DL>
-<DD><A NAME="4464"></A>
-<A NAME="4465"></A>
-<A NAME="fn:ioncore.resign"></A>
+<DD><A NAME="fn:ioncore.resign"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.resign()</TT>
<P>
<DL>
-<DD><A NAME="4466"></A>
-<A NAME="4467"></A>
-<A NAME="fn:ioncore.restart"></A>
+<DD><A NAME="fn:ioncore.restart"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.restart()</TT>
<P>
<DL>
-<DD><A NAME="4468"></A>
-<A NAME="4469"></A>
-<A NAME="fn:ioncore.restart_other"></A>
+<DD><A NAME="fn:ioncore.restart_other"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.restart_other(string cmd)</TT>
<P>
<DL>
-<DD><A NAME="4470"></A>
-<A NAME="4471"></A>
-<A NAME="fn:ioncore.set"></A>
+<DD><A NAME="fn:ioncore.set"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.set(table tab)</TT>
<TR><TD ALIGN="LEFT"><TT>frame_default_index</TT></TD>
<TD ALIGN="LEFT">(string) Specifies where to add new regions
on the mutually exclusive list of a frame. One of
- ''last'', ''next'' (for after current), ''next-act''
+ `<TT>last</TT>', `<TT>next</TT>', (for after current),
+ or `<TT>next-act</TT>'
(for after current and anything with activity right
after it).</TD>
</TR>
</TR>
<TR><TD ALIGN="LEFT"><TT>float_placement_method</TT></TD>
<TD ALIGN="LEFT">(string) How to place floating frames.
- One of ''udlr'' (up-down, then left-right),
- ''lrud'' (left-right, then up-down) or ''random''.</TD>
+ One of `<TT>udlr</TT>' (up-down, then left-right),
+ `<TT>lrud</TT>' (left-right, then up-down), or
+ `<TT>random</TT>'.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>mousefocus</TT></TD>
-<TD ALIGN="LEFT">String: ''disable'' or ''sloppy''.</TD>
+<TD ALIGN="LEFT">(string) Mouse focus mode:
+ `<TT>disable</TT>' or `<TT>sloppy</TT>'.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>unsqueeze</TT></TD>
<TD ALIGN="LEFT">(boolean) Auto-unsqueeze transients/menus/queries/etc.</TD>
<P>
<DL>
-<DD><A NAME="4472"></A>
-<A NAME="4473"></A>
-<A NAME="fn:ioncore.set_paths"></A>
+<DD><A NAME="fn:ioncore.set_paths"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.set_paths(table tab)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Set important directories (sessiondir, searchpath).
+<DD>Set important directories (the fields <TT>sessiondir</TT>, <TT>searchpath</TT>
+ of <TT>tab</TT>).
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4474"></A>
-<A NAME="4475"></A>
-<A NAME="fn:ioncore.set_selection"></A>
+<DD><A NAME="fn:ioncore.set_selection"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.set_selection(string p)</TT>
<P>
<DL>
-<DD><A NAME="4476"></A>
-<A NAME="4477"></A>
-<A NAME="fn:ioncore.shutdown"></A>
+<DD><A NAME="fn:ioncore.shutdown"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.shutdown()</TT>
<P>
<DL>
-<DD><A NAME="4478"></A>
-<A NAME="4479"></A>
-<A NAME="fn:ioncore.snapshot"></A>
+<DD><A NAME="fn:ioncore.snapshot"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.snapshot()</TT>
<P>
<DL>
-<DD><A NAME="4480"></A>
-<A NAME="4481"></A>
-<A NAME="fn:ioncore.tagged_clear"></A>
+<DD><A NAME="fn:ioncore.tagged_clear"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.tagged_clear()</TT>
<P>
<DL>
-<DD><A NAME="4482"></A>
-<A NAME="4483"></A>
-<A NAME="fn:ioncore.tagged_first"></A>
+<DD><A NAME="fn:ioncore.tagged_first"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion ioncore.tagged_first(bool untag)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Returns first tagged object, untagging it as well if <TT>untag</TT>is set.
+<DD>Returns first tagged object, untagging it as well if <TT>untag</TT> is set.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4484"></A>
-<A NAME="4485"></A>
-<A NAME="fn:ioncore.tagged_i"></A>
+<DD><A NAME="fn:ioncore.tagged_i"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool ioncore.tagged_i(function iterfn)</TT>
<P>
<DL>
-<DD><A NAME="4486"></A>
-<A NAME="4487"></A>
-<A NAME="fn:ioncore.unsqueeze"></A>
+<DD><A NAME="fn:ioncore.unsqueeze"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.unsqueeze(WRegion reg, bool override)</TT>
<P>
<DL>
-<DD><A NAME="4488"></A>
-<A NAME="4489"></A>
-<A NAME="fn:ioncore.version"></A>
+<DD><A NAME="fn:ioncore.version"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string ioncore.version()</TT>
<P>
<DL>
-<DD><A NAME="4490"></A>
-<A NAME="4491"></A>
-<A NAME="fn:ioncore.warn"></A>
+<DD><A NAME="fn:ioncore.warn"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.warn(string str)</TT>
<P>
<DL>
-<DD><A NAME="4492"></A>
-<A NAME="4493"></A>
-<A NAME="fn:ioncore.warn_traced"></A>
+<DD><A NAME="fn:ioncore.warn_traced"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.warn_traced(string str)</TT>
<P>
<DL>
-<DD><A NAME="4494"></A>
-<A NAME="4495"></A>
-<A NAME="fn:ioncore.x_change_property"></A>
+<DD><A NAME="fn:ioncore.x_change_property"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.x_change_property(integer win, integer atom, integer atom_type, integer format, string mode, table tab)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Modify a window property. The <TT>mode</TT> is one of
- <TT>"replace"</TT>, <TT>"prepend"</TT> or <TT>"append"</TT>, and format
+ `<TT>replace</TT>', `<TT>prepend</TT>' or `<TT>append</TT>', and format
is either 8, 16 or 32. Also see <A HREF="#fn:ioncore.x_get_window_property"><TT>ioncore.x_get_window_property</TT></A>
and the <TT>XChangeProperty</TT>(3) manual page.
<P>
<DL>
-<DD><A NAME="4496"></A>
-<A NAME="4497"></A>
-<A NAME="fn:ioncore.x_delete_property"></A>
+<DD><A NAME="fn:ioncore.x_delete_property"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.x_delete_property(integer win, integer atom)</TT>
<P>
<DL>
-<DD><A NAME="4498"></A>
-<A NAME="4499"></A>
-<A NAME="fn:ioncore.x_get_atom_name"></A>
+<DD><A NAME="fn:ioncore.x_get_atom_name"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string ioncore.x_get_atom_name(integer atom)</TT>
<P>
<DL>
-<DD><A NAME="4500"></A>
-<A NAME="4501"></A>
-<A NAME="fn:ioncore.x_get_text_property"></A>
+<DD><A NAME="fn:ioncore.x_get_text_property"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table ioncore.x_get_text_property(integer win, integer atom)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Get a text property for a window (<TT>STRING</TT>, <TT>COMPOUND_TEXT</TT>,
- or <TT>UTF8_STRING</TT> property converted). The fields in the returned
+<DD>Get a text property for a window. The fields in the returned
table (starting from 1) are the null-separated parts of the property.
See the <TT>XGetTextProperty</TT>(3) manual page for more information.
<P>
<DL>
-<DD><A NAME="4502"></A>
-<A NAME="4503"></A>
-<A NAME="fn:ioncore.x_get_window_property"></A>
+<DD><A NAME="fn:ioncore.x_get_window_property"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table ioncore.x_get_window_property(integer win, integer atom, integer atom_type, integer n32expected, bool more)</TT>
<P>
<DL>
-<DD><A NAME="4504"></A>
-<A NAME="4505"></A>
-<A NAME="fn:ioncore.x_intern_atom"></A>
+<DD><A NAME="fn:ioncore.x_intern_atom"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>integer ioncore.x_intern_atom(string name, bool only_if_exists)</TT>
<P>
<DL>
-<DD><A NAME="4506"></A>
-<A NAME="4507"></A>
-<A NAME="fn:ioncore.x_set_text_property"></A>
+<DD><A NAME="fn:ioncore.x_set_text_property"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void ioncore.x_set_text_property(integer win, integer atom, table tab)</TT>
<P>
<DL>
-<DD><A NAME="4508"></A>
-<A NAME="4509"></A>
-<A NAME="fn:ioncore.kpress"></A>
+<DD><A NAME="fn:ioncore.kpress"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.kpress(keyspec, cmd, guard)</TT>
<P>
<DL>
-<DD><A NAME="4510"></A>
-<A NAME="4511"></A>
-<A NAME="fn:ioncore.kpress_wait"></A>
+<DD><A NAME="fn:ioncore.kpress_wait"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.kpress_wait(keyspec, cmd, guard)</TT>
<P>
<DL>
-<DD><A NAME="4512"></A>
-<A NAME="4513"></A>
-<A NAME="fn:ioncore.match_winprop_name"></A>
+<DD><A NAME="fn:ioncore.defer"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool ioncore.defer(function fn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Defer execution of <TT>fn</TT> until the main loop.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:ioncore.get_hook"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.match_winprop_name(prop, cwin)</TT>
+<DD><TT>WHook ioncore.get_hook(string name)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Find named hook <TT>name</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:ioncore.match_winprop_dflt"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.match_winprop_dflt(prop, cwin, id)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<P>
<DL>
-<DD><A NAME="4514"></A>
-<A NAME="4515"></A>
-<A NAME="fn:ioncore.mclick"></A>
+<DD><A NAME="fn:ioncore.mclick"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.mclick(buttonspec, cmd, guard)</TT>
<P>
<DL>
-<DD><A NAME="4516"></A>
-<A NAME="4517"></A>
-<A NAME="fn:ioncore.mdblclick"></A>
+<DD><A NAME="fn:ioncore.mdblclick"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.mdblclick(buttonspec, cmd, guard)</TT>
<P>
<DL>
-<DD><A NAME="4518"></A>
-<A NAME="4519"></A>
-<A NAME="fn:ioncore.mdrag"></A>
+<DD><A NAME="fn:ioncore.mdrag"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.mdrag(buttonspec, cmd, guard)</TT>
<P>
<DL>
-<DD><A NAME="4520"></A>
-<A NAME="4521"></A>
-<A NAME="fn:ioncore.menuentry"></A>
+<DD><A NAME="fn:ioncore.menuentry"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.menuentry(name, cmd, guard_or_opts)</TT>
<P>
<DL>
-<DD><A NAME="4522"></A>
-<A NAME="4523"></A>
-<A NAME="fn:ioncore.mpress"></A>
+<DD><A NAME="fn:ioncore.mpress"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.mpress(buttonspec, cmd, guard)</TT>
<P>
<DL>
-<DD><A NAME="4524"></A>
-<A NAME="4525"></A>
-<A NAME="fn:ioncore.refresh_stylelist"></A>
+<DD><A NAME="fn:ioncore.refresh_stylelist"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.refresh_stylelist()</TT>
<P>
<DL>
-<DD><A NAME="4526"></A>
-<A NAME="4527"></A>
-<A NAME="fn:ioncore.submap"></A>
+<DD><A NAME="fn:ioncore.submap"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.submap(kcb_, list)</TT>
<P>
<DL>
-<DD><A NAME="4528"></A>
-<A NAME="4529"></A>
-<A NAME="fn:ioncore.submenu"></A>
+<DD><A NAME="fn:ioncore.submap_enter"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.submap_enter(cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Submap enter event for bindings.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:ioncore.submap_wait"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.submap_wait(cmd, guard)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Submap modifier release event for bindings.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:ioncore.submenu"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.submenu(name, sub_or_name, options)</TT>
<P>
<DL>
-<DD><A NAME="4530"></A>
-<A NAME="4531"></A>
-<A NAME="fn:ioncore.tagged_attach"></A>
+<DD><A NAME="fn:ioncore.tabnum.clear"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.tabnum.clear()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Clear all tab numbers set by <A HREF="#fn:ioncore.tabnum.show"><TT>ioncore.tabnum.show</TT></A>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:ioncore.tabnum.show"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>ioncore.tabnum.show(frame, delay)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Show tab numbers on <TT>frame</TT>, clearing them when submap
+ grab is released the next time. If <TT>delay</TT> is given, in
+ milliseconds, the numbers are not actually displayed until this
+ time has passed.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:ioncore.tagged_attach"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>ioncore.tagged_attach(reg, param)</TT>
<P>
<DL>
-<DD><A NAME="4533"></A>
-<A NAME="4534"></A>
-<A NAME="fn:WClientWin.get_ident"></A>
+<DD><A NAME="fn:WClientWin.get_ident"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WClientWin.get_ident(WClientWin cwin)</TT>
<P>
<DL>
-<DD><A NAME="4535"></A>
-<A NAME="4536"></A>
-<A NAME="fn:WClientWin.kill"></A>
+<DD><A NAME="fn:WClientWin.kill"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WClientWin.kill(WClientWin cwin)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Attempt to kill (with XKillWindow) the client that owns the X
- window correspoding to <TT>cwin</TT>.
+<DD>Attempt to kill (with <TT>XKillWindow</TT>) the client that owns
+ the X window correspoding to <TT>cwin</TT>.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4537"></A>
-<A NAME="4538"></A>
-<A NAME="fn:WClientWin.nudge"></A>
+<DD><A NAME="fn:WClientWin.nudge"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WClientWin.nudge(WClientWin cwin)</TT>
<P>
<DL>
-<DD><A NAME="4539"></A>
-<A NAME="4540"></A>
-<A NAME="fn:WClientWin.quote_next"></A>
+<DD><A NAME="fn:WClientWin.quote_next"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WClientWin.quote_next(WClientWin cwin)</TT>
<P>
<DL>
-<DD><A NAME="4541"></A>
-<A NAME="4542"></A>
-<A NAME="fn:WClientWin.xid"></A>
+<DD><A NAME="fn:WClientWin.xid"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>double WClientWin.xid(WClientWin cwin)</TT>
<P>
<DL>
-<DD><A NAME="4544"></A>
-<A NAME="4545"></A>
-<A NAME="fn:WFrame.is_shaded"></A>
+<DD><A NAME="fn:WFrame.is_shaded"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WFrame.is_shaded(WFrame frame)</TT>
<P>
<DL>
-<DD><A NAME="4546"></A>
-<A NAME="4547"></A>
-<A NAME="fn:WFrame.maximize_horiz"></A>
+<DD><A NAME="fn:WFrame.maximize_horiz"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WFrame.maximize_horiz(WFrame frame)</TT>
<P>
<DL>
-<DD><A NAME="4548"></A>
-<A NAME="4549"></A>
-<A NAME="fn:WFrame.maximize_vert"></A>
+<DD><A NAME="fn:WFrame.maximize_vert"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WFrame.maximize_vert(WFrame frame)</TT>
<P>
<DL>
-<DD><A NAME="4550"></A>
-<A NAME="4551"></A>
-<A NAME="fn:WFrame.mode"></A>
+<DD><A NAME="fn:WFrame.mode"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string WFrame.mode(WFrame frame)</TT>
<P>
<DL>
-<DD><A NAME="4552"></A>
-<A NAME="4553"></A>
-<A NAME="fn:WFrame.p_switch_tab"></A>
+<DD><A NAME="fn:WFrame.p_switch_tab"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WFrame.p_switch_tab(WFrame frame)</TT>
<P>
<DL>
-<DD><A NAME="4554"></A>
-<A NAME="4555"></A>
-<A NAME="fn:WFrame.p_tabdrag"></A>
+<DD><A NAME="fn:WFrame.p_tabdrag"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WFrame.p_tabdrag(WFrame frame)</TT>
<DT><STRONG>Description:</STRONG></DT>
<DD>Start dragging the tab that the user pressed on with the pointing device.
This function should only be used by binding it to <SPAN CLASS="textit">mpress</SPAN> or
- <SPAN CLASS="textit">mdrag</SPAN> action with area ''tab''.
+ <SPAN CLASS="textit">mdrag</SPAN> action with area `<TT>tab</TT>'.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4556"></A>
-<A NAME="4557"></A>
-<A NAME="fn:WFrame.set_mode"></A>
+<DD><A NAME="fn:WFrame.set_grattr"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WFrame.set_mode(WFrame frame, string modestr)</TT>
+<DD><TT>bool WFrame.set_grattr(WFrame frame, string attr, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Set frame mode.
+<DD>Set extra drawing engine attributes for the frame.
+ The parameter <TT>attr</TT> is the attribute, and <TT>how</TT> is
+ one of `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>'.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4558"></A>
-<A NAME="4559"></A>
-<A NAME="fn:WFrame.set_numbers"></A>
+<DD><A NAME="fn:WFrame.set_mode"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WFrame.set_numbers(WFrame frame, string how)</TT>
+<DD><TT>bool WFrame.set_mode(WFrame frame, string modestr)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Control whether tabs show numbers (set/unset/toggle).
- Resulting state is returned, which may not be what was
- requested.
+<DD>Set frame mode.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4560"></A>
-<A NAME="4561"></A>
-<A NAME="fn:WFrame.set_shaded"></A>
+<DD><A NAME="fn:WFrame.set_shaded"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WFrame.set_shaded(WFrame frame, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Set shading state according to the parameter <TT>how</TT>
- (set/unset/toggle). Resulting state is returned, which may not be
+ (`<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>').
+ Resulting state is returned, which may not be
what was requested.
</DD>
<P>
<DL>
-<DD><A NAME="4563"></A>
-<A NAME="4564"></A>
-<A NAME="fn:WGroup.attach"></A>
+<DD><A NAME="fn:WGroup.attach"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WGroup.attach(WGroup ws, WRegion reg, table param)</TT>
<P>
<DL>
-<DD><A NAME="4565"></A>
-<A NAME="4566"></A>
-<A NAME="fn:WGroup.attach_new"></A>
+<DD><A NAME="fn:WGroup.attach_new"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WGroup.attach_new(WGroup ws, table param)</TT>
<TD ALIGN="LEFT">Description</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>type</TT></TD>
-<TD ALIGN="LEFT">Class name (a string) of the object to be created. Mandatory.</TD>
+<TD ALIGN="LEFT">(string) Class of the object to be created. Mandatory.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>name</TT></TD>
-<TD ALIGN="LEFT">Name of the object to be created (a string). Optional.</TD>
+<TD ALIGN="LEFT">(string) Name of the object to be created.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>switchto</TT></TD>
-<TD ALIGN="LEFT">Should the region be switched to (boolean)? Optional.</TD>
+<TD ALIGN="LEFT">(boolean) Should the region be switched to?</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>level</TT></TD>
-<TD ALIGN="LEFT">Stacking level; default is 1.</TD>
+<TD ALIGN="LEFT">(integer) Stacking level; default is 1.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>modal</TT></TD>
-<TD ALIGN="LEFT">Make object modal; ignored if level is set.</TD>
+<TD ALIGN="LEFT">(boolean) Make object modal; ignored if level is set.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>sizepolicy</TT></TD>
-<TD ALIGN="LEFT">Size policy.</TD>
+<TD ALIGN="LEFT">(string) Size policy; see Section <A HREF="#sec:sizepolicies">6.10.1</A>.</TD>
</TR>
</TABLE>
<P>
<DL>
-<DD><A NAME="4567"></A>
-<A NAME="4568"></A>
-<A NAME="fn:WGroup.bottom"></A>
+<DD><A NAME="fn:WGroup.bottom"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WGroup.bottom(WGroup ws)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Returns the 'bottom' of <TT>ws</TT>.
+<DD>Returns the `bottom' of <TT>ws</TT>.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4569"></A>
-<A NAME="4570"></A>
-<A NAME="fn:WGroup.is_fullscreen"></A>
+<DD><A NAME="fn:WGroup.is_fullscreen"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WGroup.is_fullscreen(WGroup grp)</TT>
<P>
<DL>
-<DD><A NAME="4571"></A>
-<A NAME="4572"></A>
-<A NAME="fn:WGroup.managed_i"></A>
+<DD><A NAME="fn:WGroup.managed_i"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WGroup.managed_i(WGroup ws, function iterfn)</TT>
<P>
<DL>
-<DD><A NAME="4573"></A>
-<A NAME="4574"></A>
-<A NAME="fn:WGroup.set_bottom"></A>
+<DD><A NAME="fn:WGroup.set_bottom"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WGroup.set_bottom(WGroup ws, WRegion reg)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Sets the 'bottom' of <TT>ws</TT>. The region <TT>reg</TT> must already
+<DD>Sets the `bottom' of <TT>ws</TT>. The region <TT>reg</TT> must already
be managed by <TT>ws</TT>, unless <TT>nil</TT>.
</DD>
<P>
<DL>
-<DD><A NAME="4575"></A>
-<A NAME="4576"></A>
-<A NAME="fn:WGroup.set_fullscreen"></A>
+<DD><A NAME="fn:WGroup.set_fullscreen"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WGroup.set_fullscreen(WGroup grp, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Set client window <TT>reg</TT> full screen state according to the
- parameter <TT>how</TT> (set/unset/toggle). Resulting state is returned,
- which may not be what was requested.
+ parameter <TT>how</TT> (one of `<TT>set</TT>', `<TT>unset</TT>', or
+ `<TT>toggle</TT>'). Resulting state is returned, which may not be
+ what was requested.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4579"></A>
-<A NAME="4580"></A>
-<A NAME="fn:WGroupWS.attach_framed"></A>
+<DD><A NAME="fn:WGroupWS.attach_framed"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WGroupWS.attach_framed(WGroupWS ws, WRegion reg, table t)</TT>
<P>
<H3><A NAME="SECTION00716000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WInfoWin functions</A>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">6</SPAN> WHook functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:WHook.add"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WHook.add(WHook hk, function efn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Add <TT>efn</TT> to the list of functions to be called when the
+ hook <TT>hk</TT> is triggered.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:WHook.listed"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WHook.listed(WHook hk, function efn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is <TT>fn</TT> hooked to hook <TT>hk</TT>?
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:WHook.remove"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WHook.remove(WHook hk, function efn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Remove <TT>efn</TT> from the list of functions to be called when the
+ hook <TT>hk</TT> is triggered.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION00717000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WInfoWin functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4582"></A>
-<A NAME="4583"></A>
-<A NAME="fn:WInfoWin.set_text"></A>
+<DD><A NAME="fn:WInfoWin.set_text"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WInfoWin.set_text(WInfoWin p, string str, integer maxw)</TT>
<P>
-<H3><A NAME="SECTION00717000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">7</SPAN> WMPlex functions</A>
+<H3><A NAME="SECTION00718000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMPlex functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4585"></A>
-<A NAME="4586"></A>
-<A NAME="fn:WMPlex.attach"></A>
+<DD><A NAME="fn:WMPlex.attach"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WMPlex.attach(WMPlex mplex, WRegion reg, table param)</TT>
<P>
<DL>
-<DD><A NAME="4587"></A>
-<A NAME="4588"></A>
-<A NAME="fn:WMPlex.attach_new"></A>
+<DD><A NAME="fn:WMPlex.attach_new"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WMPlex.attach_new(WMPlex mplex, table param)</TT>
by e.g. the mutually exclusive list being empty.
This option overrides <TT>switchto</TT>.</TD>
</TR>
+<TR><TD ALIGN="LEFT"><TT>pseudomodal</TT></TD>
+<TD ALIGN="LEFT">(boolean) The attached region is ``pseudomodal''
+ if the stacking level dictates it to be modal.
+ This means that the region may be hidden to display
+ regions with lesser stacking levels.</TD>
+</TR>
<TR><TD ALIGN="LEFT"><TT>sizepolicy</TT></TD>
-<TD ALIGN="LEFT">(integer) Size policy.</TD>
+<TD ALIGN="LEFT">(string) Size policy; see Section <A HREF="#sec:sizepolicies">6.10.1</A>.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>geom</TT></TD>
<TD ALIGN="LEFT">(table) Geometry specification.</TD>
<P>
<DL>
-<DD><A NAME="4589"></A>
-<A NAME="4590"></A>
-<A NAME="fn:WMPlex.dec_index"></A>
+<DD><A NAME="fn:WMPlex.dec_index"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMPlex.dec_index(WMPlex mplex, WRegion r)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Move <TT>r</TT> ''right'' within objects managed by <TT>mplex</TT> on list 1.
+<DD>Move <TT>r</TT> ``left'' within objects managed by <TT>mplex</TT> on list 1.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4591"></A>
-<A NAME="4592"></A>
-<A NAME="fn:WMPlex.get_index"></A>
+<DD><A NAME="fn:WMPlex.get_index"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>integer WMPlex.get_index(WMPlex mplex, WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4593"></A>
-<A NAME="4594"></A>
-<A NAME="fn:WMPlex.get_stdisp"></A>
+<DD><A NAME="fn:WMPlex.get_stdisp"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WMPlex.get_stdisp(WMPlex mplex)</TT>
<P>
<DL>
-<DD><A NAME="4595"></A>
-<A NAME="4596"></A>
-<A NAME="fn:WMPlex.inc_index"></A>
+<DD><A NAME="fn:WMPlex.inc_index"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMPlex.inc_index(WMPlex mplex, WRegion r)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Move <TT>r</TT> ''right'' within objects managed by <TT>mplex</TT> on list 1.
+<DD>Move <TT>r</TT> ``right'' within objects managed by <TT>mplex</TT> on list 1.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4597"></A>
-<A NAME="4598"></A>
-<A NAME="fn:WMPlex.is_hidden"></A>
+<DD><A NAME="fn:WMPlex.is_hidden"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WMPlex.is_hidden(WMPlex mplex, WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4599"></A>
-<A NAME="4600"></A>
-<A NAME="fn:WMPlex.managed_i"></A>
+<DD><A NAME="fn:WMPlex.managed_i"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WMPlex.managed_i(WMPlex mplex, function iterfn)</TT>
<P>
<DL>
-<DD><A NAME="4601"></A>
-<A NAME="4602"></A>
-<A NAME="fn:WMPlex.mx_count"></A>
+<DD><A NAME="fn:WMPlex.mx_count"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>integer WMPlex.mx_count(WMPlex mplex)</TT>
<P>
<DL>
-<DD><A NAME="4603"></A>
-<A NAME="4604"></A>
-<A NAME="fn:WMPlex.mx_current"></A>
+<DD><A NAME="fn:WMPlex.mx_current"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WMPlex.mx_current(WMPlex mplex)</TT>
<P>
<DL>
-<DD><A NAME="4605"></A>
-<A NAME="4606"></A>
-<A NAME="fn:WMPlex.mx_i"></A>
+<DD><A NAME="fn:WMPlex.mx_i"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WMPlex.mx_i(WMPlex mplex, function iterfn)</TT>
<P>
<DL>
-<DD><A NAME="4607"></A>
-<A NAME="4608"></A>
-<A NAME="fn:WMPlex.mx_nth"></A>
+<DD><A NAME="fn:WMPlex.mx_nth"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WMPlex.mx_nth(WMPlex mplex, integer n)</TT>
<P>
<DL>
-<DD><A NAME="4609"></A>
-<A NAME="4610"></A>
-<A NAME="fn:WMPlex.set_hidden"></A>
+<DD><A NAME="fn:WMPlex.set_hidden"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WMPlex.set_hidden(WMPlex mplex, WRegion reg, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Set the visibility of the region <TT>reg</TT> on <TT>mplex</TT>
- as specified with the parameter <TT>how</TT> (set/unset/toggle).
+ as specified with the parameter <TT>how</TT>
+ (one of `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>').
The resulting state is returned.
</DD>
<P>
<DL>
-<DD><A NAME="4611"></A>
-<A NAME="4612"></A>
-<A NAME="fn:WMPlex.set_index"></A>
+<DD><A NAME="fn:WMPlex.set_index"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMPlex.set_index(WMPlex mplex, WRegion reg, integer index)</TT>
<DD>Set index of <TT>reg</TT> to <TT>index</TT> within the mutually exclusive
list of <TT>mplex</TT>. Special values for <TT>index</TT> are:
<TABLE CELLPADDING=3 WIDTH="100%">
-<TR><TD ALIGN="LEFT"><SPAN CLASS="MATH"></SPAN></TD>
+<TR><TD ALIGN="LEFT"><SPAN CLASS="MATH"><IMG
+ WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img4.png"
+ ALT="$-1$"></SPAN></TD>
<TD ALIGN="LEFT">Last.</TD>
</TR>
-<TR><TD ALIGN="LEFT"><SPAN CLASS="MATH"></SPAN></TD>
+<TR><TD ALIGN="LEFT"><SPAN CLASS="MATH"><IMG
+ WIDTH="27" HEIGHT="31" ALIGN="MIDDLE" BORDER="0"
+ SRC="img5.png"
+ ALT="$-2$"></SPAN></TD>
<TD ALIGN="LEFT">After <A HREF="#fn:WMPlex.mx_current"><TT>WMPlex.mx_current</TT></A>.</TD>
</TR>
</TABLE>
<P>
<DL>
-<DD><A NAME="4613"></A>
-<A NAME="4614"></A>
-<A NAME="fn:WMPlex.set_stdisp"></A>
+<DD><A NAME="fn:WMPlex.set_stdisp"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WMPlex.set_stdisp(WMPlex mplex, table t)</TT>
</TR>
<TR><TD ALIGN="LEFT"><TT>pos</TT></TD>
<TD ALIGN="LEFT">The corner of the screen to place the status display
- in. One of <TT>tl</TT>, <TT>tr</TT>, <TT>bl</TT> or <TT>br</TT>.</TD>
+ in: one of `<TT>tl</TT>', `<TT>tr</TT>', `<TT>bl</TT>'
+ or `<TT>br</TT>'.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>action</TT></TD>
-<TD ALIGN="LEFT">If this field is set to <TT>keep</TT>, <TT>corner</TT>
+<TD ALIGN="LEFT">If this field is set to `<TT>keep</TT>', <TT>corner</TT>
and <TT>orientation</TT> are changed for the existing
- status display. If this field is set to <TT>remove</TT>,
+ status display. If this field is set to `<TT>remove</TT>',
the existing status display is removed. If this
- field is not set or is set to <TT>replace</TT>, a
+ field is not set or is set to `<TT>replace</TT>', a
new status display is created and the old, if any,
removed.</TD>
</TR>
<P>
<DL>
-<DD><A NAME="4615"></A>
-<A NAME="4616"></A>
-<A NAME="fn:WMPlex.switch_next"></A>
+<DD><A NAME="fn:WMPlex.switch_next"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMPlex.switch_next(WMPlex mplex)</TT>
<P>
<DL>
-<DD><A NAME="4617"></A>
-<A NAME="4618"></A>
-<A NAME="fn:WMPlex.switch_nth"></A>
+<DD><A NAME="fn:WMPlex.switch_nth"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMPlex.switch_nth(WMPlex mplex, integer n)</TT>
<P>
<DL>
-<DD><A NAME="4619"></A>
-<A NAME="4620"></A>
-<A NAME="fn:WMPlex.switch_prev"></A>
+<DD><A NAME="fn:WMPlex.switch_prev"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMPlex.switch_prev(WMPlex mplex)</TT>
<P>
-<H3><A NAME="SECTION00718000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">8</SPAN> WMoveresMode functions</A>
+<H3><A NAME="SECTION00719000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WMoveresMode functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4622"></A>
-<A NAME="4623"></A>
-<A NAME="fn:WMoveresMode.cancel"></A>
+<DD><A NAME="fn:WMoveresMode.cancel"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMoveresMode.cancel(WMoveresMode mode)</TT>
<P>
<DL>
-<DD><A NAME="4624"></A>
-<A NAME="4625"></A>
-<A NAME="fn:WMoveresMode.finish"></A>
+<DD><A NAME="fn:WMoveresMode.finish"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMoveresMode.finish(WMoveresMode mode)</TT>
<P>
<DL>
-<DD><A NAME="4626"></A>
-<A NAME="4627"></A>
-<A NAME="fn:WMoveresMode.geom"></A>
+<DD><A NAME="fn:WMoveresMode.geom"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WMoveresMode.geom(WMoveresMode mode)</TT>
<P>
<DL>
-<DD><A NAME="4628"></A>
-<A NAME="4629"></A>
-<A NAME="fn:WMoveresMode.move"></A>
+<DD><A NAME="fn:WMoveresMode.move"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMoveresMode.move(WMoveresMode mode, integer horizmul, integer vertmul)</TT>
<P>
<DL>
-<DD><A NAME="4630"></A>
-<A NAME="4631"></A>
-<A NAME="fn:WMoveresMode.resize"></A>
+<DD><A NAME="fn:WMoveresMode.resize"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMoveresMode.resize(WMoveresMode mode, integer left, integer right, integer top, integer bottom)</TT>
<P>
<DL>
-<DD><A NAME="4632"></A>
-<A NAME="4633"></A>
-<A NAME="fn:WMoveresMode.rqgeom"></A>
+<DD><A NAME="fn:WMoveresMode.rqgeom"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WMoveresMode.rqgeom(WMoveresMode mode, table g)</TT>
<P>
-<H3><A NAME="SECTION00719000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">9</SPAN> WRegion functions</A>
+<H3><A NAME="SECTION007110000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRegion functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4635"></A>
-<A NAME="4636"></A>
-<A NAME="fn:WRegion.begin_kbresize"></A>
+<DD><A NAME="fn:WRegion.begin_kbresize"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WMoveresMode WRegion.begin_kbresize(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4637"></A>
-<A NAME="4638"></A>
-<A NAME="fn:WRegion.current"></A>
+<DD><A NAME="fn:WRegion.current"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WRegion.current(WRegion mgr)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Return the object, if any, that is considered ''currently active''
+<DD>Return the object, if any, that is considered ``currently active''
within the objects managed by <TT>mplex</TT>.
</DD>
<P>
<DL>
-<DD><A NAME="4639"></A>
-<A NAME="4640"></A>
-<A NAME="fn:WRegion.geom"></A>
+<DD><A NAME="fn:WRegion.geom"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WRegion.geom(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4641"></A>
-<A NAME="4642"></A>
-<A NAME="fn:WRegion.get_configuration"></A>
+<DD><A NAME="fn:WRegion.get_configuration"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WRegion.get_configuration(WRegion reg, bool clientwins)</TT>
<P>
<DL>
-<DD><A NAME="4643"></A>
-<A NAME="4644"></A>
-<A NAME="fn:WRegion.goto"></A>
+<DD><A NAME="fn:WRegion.goto"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WRegion.goto(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4645"></A>
-<A NAME="4646"></A>
-<A NAME="fn:WRegion.groupleader_of"></A>
+<DD><A NAME="fn:WRegion.groupleader_of"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WRegion.groupleader_of(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4647"></A>
-<A NAME="4648"></A>
-<A NAME="fn:WRegion.is_active"></A>
+<DD><A NAME="fn:WRegion.is_active"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WRegion.is_active(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4649"></A>
-<A NAME="4650"></A>
-<A NAME="fn:WRegion.is_activity"></A>
+<DD><A NAME="fn:WRegion.is_activity"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WRegion.is_activity(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4651"></A>
-<A NAME="4652"></A>
-<A NAME="fn:WRegion.is_mapped"></A>
+<DD><A NAME="fn:WRegion.is_mapped"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WRegion.is_mapped(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4653"></A>
-<A NAME="4654"></A>
-<A NAME="fn:WRegion.is_tagged"></A>
+<DD><A NAME="fn:WRegion.is_tagged"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WRegion.is_tagged(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4655"></A>
-<A NAME="4656"></A>
-<A NAME="fn:WRegion.manager"></A>
+<DD><A NAME="fn:WRegion.manager"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WRegion.manager(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4657"></A>
-<A NAME="4658"></A>
-<A NAME="fn:WRegion.name"></A>
+<DD><A NAME="fn:WRegion.name"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string WRegion.name(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4659"></A>
-<A NAME="4660"></A>
-<A NAME="fn:WRegion.parent"></A>
+<DD><A NAME="fn:WRegion.parent"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WWindow WRegion.parent(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4661"></A>
-<A NAME="4662"></A>
-<A NAME="fn:WRegion.rootwin_of"></A>
+<DD><A NAME="fn:WRegion.rootwin_of"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRootWin WRegion.rootwin_of(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4663"></A>
-<A NAME="4664"></A>
-<A NAME="fn:WRegion.rqclose"></A>
+<DD><A NAME="fn:WRegion.rqclose"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WRegion.rqclose(WRegion reg, bool relocate)</TT>
the client supports the <TT>WM_DELETE</TT> protocol (see also
<A HREF="#fn:WClientWin.kill"><TT>WClientWin.kill</TT></A>). The region will not be destroyed when
this function returns. To find out if and when it is destroyed,
- use the "deinit" notification. If <TT>relocate</TT> is not set, and
- <TT>reg</TT> manages other regions, it will not be closed. Otherwise
+ use the `<TT>deinit</TT>' notification. If <TT>relocate</TT> is not set,
+ and <TT>reg</TT> manages other regions, it will not be closed. Otherwise
the managed regions will be attempted to be relocated.
</DD>
<P>
<DL>
-<DD><A NAME="4665"></A>
-<A NAME="4666"></A>
-<A NAME="fn:WRegion.rqclose_propagate"></A>
+<DD><A NAME="fn:WRegion.rqclose_propagate"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WRegion.rqclose_propagate(WRegion reg, WRegion maybe_sub)</TT>
<P>
<DL>
-<DD><A NAME="4667"></A>
-<A NAME="4668"></A>
-<A NAME="fn:WRegion.rqgeom"></A>
+<DD><A NAME="fn:WRegion.rqgeom"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WRegion.rqgeom(WRegion reg, table g)</TT>
<P>
<DL>
-<DD><A NAME="4669"></A>
-<A NAME="4670"></A>
-<A NAME="fn:WRegion.rqorder"></A>
+<DD><A NAME="fn:WRegion.rqorder"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WRegion.rqorder(WRegion reg, string ord)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Request ordering. Currently supported values for <TT>ord</TT>
- are 'front' and 'back'.
+ are `<TT>front</TT>' and `<TT>back</TT>'.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4671"></A>
-<A NAME="4672"></A>
-<A NAME="fn:WRegion.screen_of"></A>
+<DD><A NAME="fn:WRegion.screen_of"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WScreen WRegion.screen_of(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="4673"></A>
-<A NAME="4674"></A>
-<A NAME="fn:WRegion.set_activity"></A>
+<DD><A NAME="fn:WRegion.set_activity"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WRegion.set_activity(WRegion reg, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Set activity flag of <TT>reg</TT>. The <TT>how</TT> parameter most be
- one of (set/unset/toggle).
+<DD>Set activity flag of <TT>reg</TT>. The <TT>how</TT> parameter must be
+ one of `<TT>set</TT>', `<TT>unset</TT>' or `<TT>toggle</TT>'.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4675"></A>
-<A NAME="4676"></A>
-<A NAME="fn:WRegion.set_name"></A>
+<DD><A NAME="fn:WRegion.set_name"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WRegion.set_name(WRegion reg, string p)</TT>
</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
+ 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.
<P>
<DL>
-<DD><A NAME="4677"></A>
-<A NAME="4678"></A>
-<A NAME="fn:WRegion.set_name_exact"></A>
+<DD><A NAME="fn:WRegion.set_name_exact"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WRegion.set_name_exact(WRegion reg, string p)</TT>
<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.
+ not contain a `<TT><n></TT>' suffix or this function will fail.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4679"></A>
-<A NAME="4680"></A>
-<A NAME="fn:WRegion.set_tagged"></A>
+<DD><A NAME="fn:WRegion.set_tagged"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WRegion.set_tagged(WRegion reg, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Change tagging state of <TT>reg</TT> as defined by <TT>how</TT>
- (set/unset/toggle). Resulting state is returned.
+ (one of `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>').
+ The resulting state is returned.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4681"></A>
-<A NAME="4682"></A>
-<A NAME="fn:WRegion.size_hints"></A>
+<DD><A NAME="fn:WRegion.size_hints"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WRegion.size_hints(WRegion reg)</TT>
<P>
-<H3><A NAME="SECTION007110000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">10</SPAN> WRootWin functions</A>
+<H3><A NAME="SECTION007111000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WRootWin functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4684"></A>
-<A NAME="4685"></A>
-<A NAME="fn:WRootWin.current_scr"></A>
+<DD><A NAME="fn:WRootWin.current_scr"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WScreen WRootWin.current_scr(WRootWin rootwin)</TT>
<P>
-<H3><A NAME="SECTION007111000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">11</SPAN> WScreen functions</A>
+<H3><A NAME="SECTION007112000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WScreen functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4687"></A>
-<A NAME="4688"></A>
-<A NAME="fn:WScreen.id"></A>
+<DD><A NAME="fn:WScreen.id"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>integer WScreen.id(WScreen scr)</TT>
<P>
<DL>
-<DD><A NAME="4689"></A>
-<A NAME="4690"></A>
-<A NAME="fn:WScreen.set_managed_offset"></A>
+<DD><A NAME="fn:WScreen.set_managed_offset"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WScreen.set_managed_offset(WScreen scr, table offset)</TT>
<P>
-<H3><A NAME="SECTION007112000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">12</SPAN> WWindow functions</A>
+<H3><A NAME="SECTION007113000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> WTimer functions</A>
+</H3>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:WTimer.is_set"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>bool WTimer.is_set(WTimer timer)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Is timer set?
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:WTimer.reset"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WTimer.reset(WTimer timer)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Reset timer.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:WTimer.set"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>void WTimer.set(WTimer timer, integer msecs, function fn)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Set <TT>timer</TT> to call <TT>fn</TT> in <TT>msecs</TT> milliseconds.
+
+</DD>
+</DL>
+
+<P>
+
+<H3><A NAME="SECTION007114000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> WWindow functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4692"></A>
-<A NAME="4693"></A>
-<A NAME="fn:WWindow.p_move"></A>
+<DD><A NAME="fn:WWindow.p_move"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WWindow.p_move(WWindow wwin)</TT>
<P>
<DL>
-<DD><A NAME="4694"></A>
-<A NAME="4695"></A>
-<A NAME="fn:WWindow.p_resize"></A>
+<DD><A NAME="fn:WWindow.p_resize"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WWindow.p_resize(WWindow wwin)</TT>
<P>
<DL>
-<DD><A NAME="4696"></A>
-<A NAME="4697"></A>
-<A NAME="fn:WWindow.xid"></A>
+<DD><A NAME="fn:WWindow.xid"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>double WWindow.xid(WWindow wwin)</TT>
<P>
-<H3><A NAME="SECTION007113000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">13</SPAN> global functions</A>
+<H3><A NAME="SECTION007115000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> global functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4699"></A>
-<A NAME="fn:export"></A>
+<DD><A NAME="fn:export"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>export(lib, ...)</TT>
<P>
-<H3><A NAME="SECTION007114000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">14</SPAN> gr functions</A>
+<H3><A NAME="SECTION007116000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> gr functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4701"></A>
-<A NAME="4702"></A>
-<A NAME="fn:gr.read_config"></A>
+<DD><A NAME="fn:gr.read_config"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void gr.read_config()</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Read drawing engine configuration file <SPAN CLASS="textit">draw.lua</SPAN>.
+<DD>Read drawing engine configuration file <SPAN CLASS="textit">look.lua</SPAN>.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="4703"></A>
-<A NAME="4704"></A>
-<A NAME="fn:gr.refresh"></A>
+<DD><A NAME="fn:gr.refresh"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void gr.refresh()</TT>
<P>
<DL>
-<DD><A NAME="4705"></A>
-<A NAME="4706"></A>
-<A NAME="fn:gr.select_engine"></A>
+<DD><A NAME="fn:gr.select_engine"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool gr.select_engine(string engine)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Future requests for ''brushes'' are to be forwarded to the drawing engine
+<DD>Future requests for ``brushes'' are to be forwarded to the drawing engine
<TT>engine</TT>. If no engine of such name is known, a module with that name
is attempted to be loaded. This function is only intended to be called from
colour scheme etc. configuration files and can not be used to change the
<P>
-<H3><A NAME="SECTION007115000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">15</SPAN> string functions</A>
+<H3><A NAME="SECTION007117000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">17</SPAN> string functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4708"></A>
-<A NAME="4709"></A>
-<A NAME="fn:string.shell_safe"></A>
+<DD><A NAME="fn:string.shell_safe"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string.shell_safe(str)</TT>
<P>
-<H3><A NAME="SECTION007116000000000000000">
-<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">16</SPAN> table functions</A>
+<H3><A NAME="SECTION007118000000000000000">
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">18</SPAN> table functions</A>
</H3>
<P>
<DL>
-<DD><A NAME="4711"></A>
-<A NAME="4712"></A>
-<A NAME="fn:table.append"></A>
+<DD><A NAME="fn:table.append"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table.append(t1, t2)</TT>
<P>
<DL>
-<DD><A NAME="4713"></A>
-<A NAME="4714"></A>
-<A NAME="fn:table.copy"></A>
+<DD><A NAME="fn:table.copy"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table.copy(t, deep)</TT>
<P>
<DL>
-<DD><A NAME="4715"></A>
-<A NAME="4716"></A>
-<A NAME="fn:table.icat"></A>
+<DD><A NAME="fn:table.icat"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table.icat(t1, t2)</TT>
<P>
<DL>
-<DD><A NAME="4717"></A>
-<A NAME="4718"></A>
-<A NAME="fn:table.join"></A>
+<DD><A NAME="fn:table.join"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table.join(t1, t2)</TT>
<P>
<DL>
-<DD><A NAME="4719"></A>
-<A NAME="4720"></A>
-<A NAME="fn:table.map"></A>
+<DD><A NAME="fn:table.map"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table.map(f, t)</TT>
</H2>
<DL>
-<DD><A NAME="7110"></A>
-<A NAME="7111"></A>
-<A NAME="fn:mod_tiling.get"></A>
+<DD><A NAME="fn:mod_tiling.get"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table mod_tiling.get()</TT>
<P>
<DL>
-<DD><A NAME="7112"></A>
-<A NAME="7113"></A>
-<A NAME="fn:mod_tiling.mkbottom"></A>
+<DD><A NAME="fn:mod_tiling.mkbottom"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool mod_tiling.mkbottom(WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="7114"></A>
-<A NAME="7115"></A>
-<A NAME="fn:mod_tiling.set"></A>
+<DD><A NAME="fn:mod_tiling.set"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void mod_tiling.set(table tab)</TT>
<P>
<DL>
-<DD><A NAME="7116"></A>
-<A NAME="7117"></A>
-<A NAME="fn:mod_tiling.untile"></A>
+<DD><A NAME="fn:mod_tiling.untile"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool mod_tiling.untile(WTiling tiling)</TT>
<P>
<DL>
-<DD><A NAME="7119"></A>
-<A NAME="7120"></A>
-<A NAME="fn:WSplit.geom"></A>
+<DD><A NAME="fn:WSplit.geom"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WSplit.geom(WSplit split)</TT>
<P>
<DL>
-<DD><A NAME="7121"></A>
-<A NAME="7122"></A>
-<A NAME="fn:WSplit.parent"></A>
+<DD><A NAME="fn:WSplit.parent"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WSplitInner WSplit.parent(WSplit split)</TT>
<P>
<DL>
-<DD><A NAME="7123"></A>
-<A NAME="7124"></A>
-<A NAME="fn:WSplit.rqgeom"></A>
+<DD><A NAME="fn:WSplit.rqgeom"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WSplit.rqgeom(WSplit node, table g)</TT>
<P>
<DL>
-<DD><A NAME="7125"></A>
-<A NAME="7126"></A>
-<A NAME="fn:WSplit.transpose"></A>
+<DD><A NAME="fn:WSplit.transpose"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WSplit.transpose(WSplit node)</TT>
<P>
<DL>
-<DD><A NAME="7128"></A>
-<A NAME="7129"></A>
-<A NAME="fn:WSplitInner.current"></A>
+<DD><A NAME="fn:WSplitInner.current"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WSplit WSplitInner.current(WSplitInner node)</TT>
<P>
<DL>
-<DD><A NAME="7131"></A>
-<A NAME="7132"></A>
-<A NAME="fn:WSplitRegion.reg"></A>
+<DD><A NAME="fn:WSplitRegion.reg"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WSplitRegion.reg(WSplitRegion node)</TT>
<P>
<DL>
-<DD><A NAME="7134"></A>
-<A NAME="7135"></A>
-<A NAME="fn:WSplitSplit.br"></A>
+<DD><A NAME="fn:WSplitSplit.br"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WSplit WSplitSplit.br(WSplitSplit split)</TT>
<P>
<DL>
-<DD><A NAME="7136"></A>
-<A NAME="7137"></A>
-<A NAME="fn:WSplitSplit.dir"></A>
+<DD><A NAME="fn:WSplitSplit.dir"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string WSplitSplit.dir(WSplitSplit split)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Returns the direction of <TT>split</TT>; either ''vertical'' or
- ''horizontal''.
+<DD>Returns the direction of <TT>split</TT>; either `<TT>vertical</TT>' or
+ `<TT>horizontal</TT>'.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="7138"></A>
-<A NAME="7139"></A>
-<A NAME="fn:WSplitSplit.flip"></A>
+<DD><A NAME="fn:WSplitSplit.flip"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WSplitSplit.flip(WSplitSplit split)</TT>
<P>
<DL>
-<DD><A NAME="7140"></A>
-<A NAME="7141"></A>
-<A NAME="fn:WSplitSplit.tl"></A>
+<DD><A NAME="fn:WSplitSplit.tl"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WSplit WSplitSplit.tl(WSplitSplit split)</TT>
<P>
<DL>
-<DD><A NAME="7143"></A>
-<A NAME="7144"></A>
-<A NAME="fn:WTiling.flip_at"></A>
+<DD><A NAME="fn:WTiling.flip_at"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WTiling.flip_at(WTiling ws, WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="7145"></A>
-<A NAME="7146"></A>
-<A NAME="fn:WTiling.transpose_at"></A>
+<DD><A NAME="fn:WTiling.transpose_at"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WTiling.transpose_at(WTiling ws, WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="7147"></A>
-<A NAME="7148"></A>
-<A NAME="fn:WTiling.farthest"></A>
+<DD><A NAME="fn:WTiling.farthest"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WTiling.farthest(WTiling ws, string dirstr, bool any)</TT>
<DT><STRONG>Description:</STRONG></DT>
<DD>Return the most previously active region on <TT>ws</TT> with no
other regions next to it in direction <TT>dirstr</TT>
- (left/right/up/down). If <TT>any</TT> is not set, the status
- display is not considered.
+ (`<TT>left</TT>', `<TT>right</TT>', `<TT>up</TT>', or `<TT>down</TT>').
+ If <TT>any</TT> is not set, the status display is not considered.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="7149"></A>
-<A NAME="7150"></A>
-<A NAME="fn:WTiling.managed_i"></A>
+<DD><A NAME="fn:WTiling.managed_i"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WTiling.managed_i(WTiling ws, function iterfn)</TT>
<P>
<DL>
-<DD><A NAME="7151"></A>
-<A NAME="7152"></A>
-<A NAME="fn:WTiling.nextto"></A>
+<DD><A NAME="fn:WTiling.nextto"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WRegion WTiling.nextto(WTiling ws, WRegion reg, string dirstr, bool any)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Return the most previously active region next to <TT>reg</TT> in
- direction <TT>dirstr</TT> (left/right/up/down). The region <TT>reg</TT>
+ direction <TT>dirstr</TT> (`<TT>left</TT>', `<TT>right</TT>', `<TT>up</TT>',
+ or `<TT>down</TT>'). The region <TT>reg</TT>
must be managed by <TT>ws</TT>. If <TT>any</TT> is not set, the status display
is not considered.
<P>
<DL>
-<DD><A NAME="7153"></A>
-<A NAME="7154"></A>
-<A NAME="fn:WTiling.node_of"></A>
+<DD><A NAME="fn:WTiling.node_of"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WSplitRegion WTiling.node_of(WTiling ws, WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="7155"></A>
-<A NAME="7156"></A>
-<A NAME="fn:WTiling.set_floating_at"></A>
+<DD><A NAME="fn:WTiling.set_floating_at"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WTiling.set_floating_at(WTiling ws, WRegion reg, string how, string dirstr)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Toggle floating of the sides of a split containin <TT>reg</TT> as indicated
- by the parameters <TT>how</TT> (set/unset/toggle) and <TT>dirstr</TT>
- (left/right/up/down/any). The new status is returned (and <TT>false</TT>
- also on error).
+ by the parameters <TT>how</TT> (`<TT>set</TT>', `<TT>unset</TT>', or
+ `<TT>toggle</TT>') and <TT>dirstr</TT> (`<TT>left</TT>', `<TT>right</TT>',
+ `<TT>up</TT>', or `<TT>down</TT>'). The new status is returned
+ (and <TT>false</TT> also on error).
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="7157"></A>
-<A NAME="7158"></A>
-<A NAME="fn:WTiling.set_floating"></A>
+<DD><A NAME="fn:WTiling.set_floating"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WSplitSplit WTiling.set_floating(WTiling ws, WSplitSplit split, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Toggle floating of a split's sides at <TT>split</TT> as indicated by the
- parameter <TT>how</TT> (set/unset/toggle). A split of the appropriate is
- returned, if there was a change.
+ parameter <TT>how</TT> (`<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>').
+ A split of the appropriate is returned, if there was a change.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="7159"></A>
-<A NAME="7160"></A>
-<A NAME="fn:WTiling.split"></A>
+<DD><A NAME="fn:WTiling.split"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WFrame WTiling.split(WTiling ws, WSplit node, string dirstr)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>Create a new frame on <TT>ws</TT> above/below/left of/right of
- <TT>node</TT> as indicated by <TT>dirstr</TT>. If <TT>dirstr</TT> is
- prefixed with ''floating:'' a floating split is created.
+<DD>Create a new frame on <TT>ws</TT> `<TT>above</TT>', `<TT>below</TT>'
+ `<TT>left</TT>' of, or `<TT>right</TT>' of <TT>node</TT> as indicated
+ by <TT>dirstr</TT>. If <TT>dirstr</TT> is prefixed with
+ `<TT>floating:</TT>' a floating split is created.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="7161"></A>
-<A NAME="7162"></A>
-<A NAME="fn:WTiling.split_at"></A>
+<DD><A NAME="fn:WTiling.split_at"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WFrame WTiling.split_at(WTiling ws, WFrame frame, string dirstr, bool attach_current)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Split <TT>frame</TT> creating a new frame to direction <TT>dirstr</TT>
- (one of ''left'', ''right'', ''top'' or ''bottom'') of <TT>frame</TT>.
+ (one of `<TT>left</TT>', `<TT>right</TT>', `<TT>top</TT>' or
+ `<TT>bottom</TT>') of <TT>frame</TT>.
If <TT>attach_current</TT> is set, the region currently displayed in
<TT>frame</TT>, if any, is moved to thenew frame.
- If <TT>dirstr</TT> is prefixed with ''floating:'' a floating split is
- created.
+ If <TT>dirstr</TT> is prefixed with `<TT>floating:</TT>', a floating
+ split is created.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="7163"></A>
-<A NAME="7164"></A>
-<A NAME="fn:WTiling.split_top"></A>
+<DD><A NAME="fn:WTiling.split_top"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WFrame WTiling.split_top(WTiling ws, string dirstr)</TT>
<P>
<DL>
-<DD><A NAME="7165"></A>
-<A NAME="7166"></A>
-<A NAME="fn:WTiling.split_tree"></A>
+<DD><A NAME="fn:WTiling.split_tree"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>WSplit WTiling.split_tree(WTiling ws)</TT>
<P>
<DL>
-<DD><A NAME="7167"></A>
-<A NAME="7168"></A>
-<A NAME="fn:WTiling.unsplit_at"></A>
+<DD><A NAME="fn:WTiling.unsplit_at"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WTiling.unsplit_at(WTiling ws, WRegion reg)</TT>
</H2>
<DL>
-<DD><A NAME="8171"></A>
-<A NAME="8172"></A>
-<A NAME="fn:mod_query.defcmd"></A>
+<DD><A NAME="fn:mod_query.defcmd"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.defcmd(cmd, fn)</TT>
<P>
<DL>
-<DD><A NAME="8173"></A>
-<A NAME="8174"></A>
-<A NAME="fn:mod_query.message"></A>
+<DD><A NAME="fn:mod_query.message"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.message(mplex, str)</TT>
<P>
<DL>
-<DD><A NAME="8175"></A>
-<A NAME="8176"></A>
-<A NAME="fn:mod_query.get"></A>
+<DD><A NAME="fn:mod_query.get"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table mod_query.get()</TT>
<P>
<DL>
-<DD><A NAME="8177"></A>
-<A NAME="8178"></A>
-<A NAME="fn:mod_query.history_clear"></A>
+<DD><A NAME="fn:mod_query.history_clear"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void mod_query.history_clear()</TT>
<P>
<DL>
-<DD><A NAME="8179"></A>
-<A NAME="8180"></A>
-<A NAME="fn:mod_query.history_get"></A>
+<DD><A NAME="fn:mod_query.history_get"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string mod_query.history_get(integer n)</TT>
<P>
<DL>
-<DD><A NAME="8181"></A>
-<A NAME="8182"></A>
-<A NAME="fn:mod_query.history_push"></A>
+<DD><A NAME="fn:mod_query.history_push"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool mod_query.history_push(string str)</TT>
<P>
<DL>
-<DD><A NAME="8183"></A>
-<A NAME="8184"></A>
-<A NAME="fn:mod_query.history_search"></A>
+<DD><A NAME="fn:mod_query.history_search"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>integer mod_query.history_search(string s, integer from, bool bwd, bool exact)</TT>
<P>
<DL>
-<DD><A NAME="8185"></A>
-<A NAME="8186"></A>
-<A NAME="fn:mod_query.history_table"></A>
+<DD><A NAME="fn:mod_query.history_table"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table mod_query.history_table()</TT>
<P>
<DL>
-<DD><A NAME="8187"></A>
-<A NAME="8188"></A>
-<A NAME="fn:mod_query.set"></A>
+<DD><A NAME="fn:mod_query.set"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void mod_query.set(table tab)</TT>
<P>
<DL>
-<DD><A NAME="8189"></A>
-<A NAME="8190"></A>
-<A NAME="fn:mod_query.popen_completions"></A>
+<DD><A NAME="fn:mod_query.popen_completions"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.popen_completions(cp, cmd, fn, reshnd)</TT>
<P>
<DL>
-<DD><A NAME="8191"></A>
-<A NAME="8192"></A>
-<A NAME="fn:mod_query.query"></A>
+<DD><A NAME="fn:mod_query.query"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query(mplex, prompt, initvalue, handler, completor,
<P>
<DL>
-<DD><A NAME="8193"></A>
-<A NAME="8194"></A>
-<A NAME="fn:mod_query.query_attachclient"></A>
+<DD><A NAME="fn:mod_query.query_attachclient"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_attachclient(mplex)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>This query asks for the name of a client window and switches
- focus to the one entered. It uses the completion function
- <A HREF="#fn:ioncore.complete_clientwin"><TT>ioncore.complete_clientwin</TT></A>.
+<DD>This query asks for the name of a client window and attaches
+ it to the frame the query was opened in. It uses the completion
+ function <A HREF="#fn:ioncore.complete_clientwin"><TT>ioncore.complete_clientwin</TT></A>.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="8195"></A>
-<A NAME="8196"></A>
-<A NAME="fn:mod_query.query_editfile"></A>
+<DD><A NAME="fn:mod_query.query_editfile"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_editfile(mplex, script, prompt)</TT>
<P>
<DL>
-<DD><A NAME="8197"></A>
-<A NAME="8198"></A>
-<A NAME="fn:mod_query.query_exec"></A>
+<DD><A NAME="fn:mod_query.query_exec"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_exec(mplex)</TT>
<P>
<DL>
-<DD><A NAME="8199"></A>
-<A NAME="8200"></A>
-<A NAME="fn:mod_query.query_gotoclient"></A>
+<DD><A NAME="fn:mod_query.query_gotoclient"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_gotoclient(mplex)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
-<DD>This query asks for the name of a client window and attaches
- it to the frame the query was opened in. It uses the completion
- function <A HREF="#fn:ioncore.complete_clientwin"><TT>ioncore.complete_clientwin</TT></A>.
+<DD>This query asks for the name of a client window and switches
+ focus to the one entered. It uses the completion function
+ <A HREF="#fn:ioncore.complete_clientwin"><TT>ioncore.complete_clientwin</TT></A>.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="8201"></A>
-<A NAME="8202"></A>
-<A NAME="fn:mod_query.query_lua"></A>
+<DD><A NAME="fn:mod_query.query_lua"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_lua(mplex)</TT>
<P>
<DL>
-<DD><A NAME="8203"></A>
-<A NAME="8204"></A>
-<A NAME="fn:mod_query.query_man"></A>
+<DD><A NAME="fn:mod_query.query_man"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_man(mplex, prog)</TT>
<P>
<DL>
-<DD><A NAME="8205"></A>
-<A NAME="8206"></A>
-<A NAME="fn:mod_query.query_menu"></A>
+<DD><A NAME="fn:mod_query.query_menu"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_menu(mplex, sub, themenu, prompt)</TT>
<P>
<DL>
-<DD><A NAME="8207"></A>
-<A NAME="8208"></A>
-<A NAME="fn:mod_query.query_renameframe"></A>
+<DD><A NAME="fn:mod_query.query_renameframe"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_renameframe(frame)</TT>
<P>
<DL>
-<DD><A NAME="8209"></A>
-<A NAME="8210"></A>
-<A NAME="fn:mod_query.query_renameworkspace"></A>
+<DD><A NAME="fn:mod_query.query_renameworkspace"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_renameworkspace(mplex, ws)</TT>
<P>
<DL>
-<DD><A NAME="8211"></A>
-<A NAME="8212"></A>
-<A NAME="fn:mod_query.query_restart"></A>
+<DD><A NAME="fn:mod_query.query_restart"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_restart(mplex)</TT>
<P>
<DL>
-<DD><A NAME="8213"></A>
-<A NAME="8214"></A>
-<A NAME="fn:mod_query.query_runfile"></A>
+<DD><A NAME="fn:mod_query.query_runfile"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_runfile(mplex, script, prompt)</TT>
<P>
<DL>
-<DD><A NAME="8215"></A>
-<A NAME="8216"></A>
-<A NAME="fn:mod_query.query_shutdown"></A>
+<DD><A NAME="fn:mod_query.query_shutdown"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_shutdown(mplex)</TT>
<P>
<DL>
-<DD><A NAME="8217"></A>
-<A NAME="8218"></A>
-<A NAME="fn:mod_query.query_ssh"></A>
+<DD><A NAME="fn:mod_query.query_ssh"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_ssh(mplex, ssh)</TT>
<P>
<DL>
-<DD><A NAME="8220"></A>
-<A NAME="8221"></A>
-<A NAME="fn:mod_query.query_workspace"></A>
+<DD><A NAME="fn:mod_query.query_workspace"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_workspace(mplex)</TT>
<P>
<DL>
-<DD><A NAME="8222"></A>
-<A NAME="8223"></A>
-<A NAME="fn:mod_query.query_yesno"></A>
+<DD><A NAME="fn:mod_query.query_yesno"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.query_yesno(mplex, prompt, handler)</TT>
<P>
<DL>
-<DD><A NAME="8224"></A>
-<A NAME="8225"></A>
-<A NAME="fn:mod_query.show_about_ion"></A>
+<DD><A NAME="fn:mod_query.show_about_ion"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.show_about_ion(mplex)</TT>
<P>
<DL>
-<DD><A NAME="8226"></A>
-<A NAME="8227"></A>
-<A NAME="fn:mod_query.show_tree"></A>
+<DD><A NAME="fn:mod_query.show_tree"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.show_tree(mplex, reg, max_depth)</TT>
<P>
<DL>
-<DD><A NAME="8228"></A>
-<A NAME="8229"></A>
-<A NAME="fn:mod_query.warn"></A>
+<DD><A NAME="fn:mod_query.warn"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_query.warn(mplex, str)</TT>
<P>
<DL>
-<DD><A NAME="8231"></A>
-<A NAME="8232"></A>
-<A NAME="fn:WComplProxy.set_completions"></A>
+<DD><A NAME="fn:WComplProxy.set_completions"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WComplProxy.set_completions(WComplProxy proxy, table compls)</TT>
<P>
<DL>
-<DD><A NAME="8234"></A>
-<A NAME="8235"></A>
-<A NAME="fn:WEdln.back"></A>
+<DD><A NAME="fn:WEdln.back"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.back(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8236"></A>
-<A NAME="8237"></A>
-<A NAME="fn:WEdln.backspace"></A>
+<DD><A NAME="fn:WEdln.backspace"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.backspace(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8238"></A>
-<A NAME="8239"></A>
-<A NAME="fn:WEdln.bkill_word"></A>
+<DD><A NAME="fn:WEdln.bkill_word"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.bkill_word(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8240"></A>
-<A NAME="8241"></A>
-<A NAME="fn:WEdln.bol"></A>
+<DD><A NAME="fn:WEdln.bol"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.bol(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8242"></A>
-<A NAME="8243"></A>
-<A NAME="fn:WEdln.bskip_word"></A>
+<DD><A NAME="fn:WEdln.bskip_word"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.bskip_word(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8244"></A>
-<A NAME="8245"></A>
-<A NAME="fn:WEdln.clear_mark"></A>
+<DD><A NAME="fn:WEdln.clear_mark"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.clear_mark(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8246"></A>
-<A NAME="8247"></A>
-<A NAME="fn:WEdln.complete"></A>
+<DD><A NAME="fn:WEdln.complete"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.complete(WEdln wedln, string cycle, string mode)</TT>
<DT><STRONG>Description:</STRONG></DT>
<DD>Call completion handler with the text between the beginning of line and
current cursor position, or select next/previous completion from list if in
- auto-show-completions mode and <TT>cycle</TT> is set to ``next'' or ``prev'',
- respectively. The <TT>mode</TT> may be ``history'' or ``normal''. If it is
+ auto-show-completions mode and <TT>cycle</TT> is set to `<TT>next</TT>' or
+ `<TT>prev</TT>', respectively.
+ The <TT>mode</TT> may be `<TT>history</TT>' or `<TT>normal</TT>'. If it is
not set, the previous mode is used. Normally next entry is not cycled to
despite the setting of <TT>cycle</TT> if mode switch occurs. To override
- this, use ``next-always'' and ``prev-always'' for <TT>cycle</TT>.
+ this, use `<TT>next-always</TT>' and `<TT>prev-always</TT>' for <TT>cycle</TT>.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="8248"></A>
-<A NAME="8249"></A>
-<A NAME="fn:WEdln.contents"></A>
+<DD><A NAME="fn:WEdln.contents"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string WEdln.contents(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8250"></A>
-<A NAME="8251"></A>
-<A NAME="fn:WEdln.context"></A>
+<DD><A NAME="fn:WEdln.context"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>string WEdln.context(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8252"></A>
-<A NAME="8253"></A>
-<A NAME="fn:WEdln.copy"></A>
+<DD><A NAME="fn:WEdln.copy"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.copy(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8254"></A>
-<A NAME="8255"></A>
-<A NAME="fn:WEdln.cut"></A>
+<DD><A NAME="fn:WEdln.cut"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.cut(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8256"></A>
-<A NAME="8257"></A>
-<A NAME="fn:WEdln.delete"></A>
+<DD><A NAME="fn:WEdln.delete"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.delete(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8258"></A>
-<A NAME="8259"></A>
-<A NAME="fn:WEdln.eol"></A>
+<DD><A NAME="fn:WEdln.eol"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.eol(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8260"></A>
-<A NAME="8261"></A>
-<A NAME="fn:WEdln.finish"></A>
+<DD><A NAME="fn:WEdln.finish"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.finish(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8262"></A>
-<A NAME="8263"></A>
-<A NAME="fn:WEdln.forward"></A>
+<DD><A NAME="fn:WEdln.forward"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.forward(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8264"></A>
-<A NAME="8265"></A>
-<A NAME="fn:WEdln.history_next"></A>
+<DD><A NAME="fn:WEdln.history_next"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.history_next(WEdln wedln, bool match)</TT>
<P>
<DL>
-<DD><A NAME="8266"></A>
-<A NAME="8267"></A>
-<A NAME="fn:WEdln.history_prev"></A>
+<DD><A NAME="fn:WEdln.history_prev"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.history_prev(WEdln wedln, bool match)</TT>
<P>
<DL>
-<DD><A NAME="8268"></A>
-<A NAME="8269"></A>
-<A NAME="fn:WEdln.insstr"></A>
+<DD><A NAME="fn:WEdln.insstr"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.insstr(WEdln wedln, string str)</TT>
<P>
<DL>
-<DD><A NAME="8270"></A>
-<A NAME="8271"></A>
-<A NAME="fn:WEdln.is_histcompl"></A>
+<DD><A NAME="fn:WEdln.is_histcompl"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WEdln.is_histcompl(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8272"></A>
-<A NAME="8273"></A>
-<A NAME="fn:WEdln.kill_line"></A>
+<DD><A NAME="fn:WEdln.kill_line"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.kill_line(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8274"></A>
-<A NAME="8275"></A>
-<A NAME="fn:WEdln.kill_to_bol"></A>
+<DD><A NAME="fn:WEdln.kill_to_bol"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.kill_to_bol(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8276"></A>
-<A NAME="8277"></A>
-<A NAME="fn:WEdln.kill_to_eol"></A>
+<DD><A NAME="fn:WEdln.kill_to_eol"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.kill_to_eol(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8278"></A>
-<A NAME="8279"></A>
-<A NAME="fn:WEdln.kill_word"></A>
+<DD><A NAME="fn:WEdln.kill_word"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.kill_word(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8280"></A>
-<A NAME="8281"></A>
-<A NAME="fn:WEdln.mark"></A>
+<DD><A NAME="fn:WEdln.mark"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>integer WEdln.mark(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8282"></A>
-<A NAME="8283"></A>
-<A NAME="fn:WEdln.next_completion"></A>
+<DD><A NAME="fn:WEdln.next_completion"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WEdln.next_completion(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8284"></A>
-<A NAME="8285"></A>
-<A NAME="fn:WEdln.paste"></A>
+<DD><A NAME="fn:WEdln.paste"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.paste(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8286"></A>
-<A NAME="8287"></A>
-<A NAME="fn:WEdln.point"></A>
+<DD><A NAME="fn:WEdln.point"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>integer WEdln.point(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8288"></A>
-<A NAME="8289"></A>
-<A NAME="fn:WEdln.prev_completion"></A>
+<DD><A NAME="fn:WEdln.prev_completion"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WEdln.prev_completion(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8290"></A>
-<A NAME="8291"></A>
-<A NAME="fn:WEdln.set_context"></A>
+<DD><A NAME="fn:WEdln.set_context"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.set_context(WEdln wedln, string context)</TT>
<P>
<DL>
-<DD><A NAME="8292"></A>
-<A NAME="8293"></A>
-<A NAME="fn:WEdln.set_mark"></A>
+<DD><A NAME="fn:WEdln.set_mark"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.set_mark(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8294"></A>
-<A NAME="8295"></A>
-<A NAME="fn:WEdln.skip_word"></A>
+<DD><A NAME="fn:WEdln.skip_word"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.skip_word(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8296"></A>
-<A NAME="8297"></A>
-<A NAME="fn:WEdln.transpose_chars"></A>
+<DD><A NAME="fn:WEdln.transpose_chars"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.transpose_chars(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8298"></A>
-<A NAME="8299"></A>
-<A NAME="fn:WEdln.transpose_words"></A>
+<DD><A NAME="fn:WEdln.transpose_words"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WEdln.transpose_words(WEdln wedln)</TT>
<P>
<DL>
-<DD><A NAME="8301"></A>
-<A NAME="8302"></A>
-<A NAME="fn:WInput.cancel"></A>
+<DD><A NAME="fn:WInput.cancel"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WInput.cancel(WInput input)</TT>
<P>
<DL>
-<DD><A NAME="8303"></A>
-<A NAME="8304"></A>
-<A NAME="fn:WInput.scrolldown"></A>
+<DD><A NAME="fn:WInput.scrolldown"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WInput.scrolldown(WInput input)</TT>
<P>
<DL>
-<DD><A NAME="8305"></A>
-<A NAME="8306"></A>
-<A NAME="fn:WInput.scrollup"></A>
+<DD><A NAME="fn:WInput.scrollup"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WInput.scrollup(WInput input)</TT>
</H2>
<DL>
-<DD><A NAME="9122"></A>
-<A NAME="9123"></A>
-<A NAME="fn:mod_menu.grabmenu"></A>
+<DD><A NAME="fn:mod_menu.grabmenu"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_menu.grabmenu(mplex, sub, menu_or_name, param)</TT>
<P>
<DL>
-<DD><A NAME="9124"></A>
-<A NAME="9125"></A>
-<A NAME="fn:mod_menu.menu"></A>
+<DD><A NAME="fn:mod_menu.menu"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_menu.menu(mplex, sub, menu_or_name, param)</TT>
<P>
<DL>
-<DD><A NAME="9126"></A>
-<A NAME="9127"></A>
-<A NAME="fn:mod_menu.get"></A>
+<DD><A NAME="fn:mod_menu.get"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table mod_menu.get()</TT>
<P>
<DL>
-<DD><A NAME="9128"></A>
-<A NAME="9129"></A>
-<A NAME="fn:mod_menu.set"></A>
+<DD><A NAME="fn:mod_menu.set"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void mod_menu.set(table tab)</TT>
<P>
<DL>
-<DD><A NAME="9130"></A>
-<A NAME="9131"></A>
-<A NAME="fn:mod_menu.pmenu"></A>
+<DD><A NAME="fn:mod_menu.pmenu"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>mod_menu.pmenu(win, sub, menu_or_name)</TT>
<P>
<DL>
-<DD><A NAME="9133"></A>
-<A NAME="9134"></A>
-<A NAME="fn:WMenu.cancel"></A>
+<DD><A NAME="fn:WMenu.cancel"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMenu.cancel(WMenu menu)</TT>
<P>
<DL>
-<DD><A NAME="9135"></A>
-<A NAME="9136"></A>
-<A NAME="fn:WMenu.finish"></A>
+<DD><A NAME="fn:WMenu.finish"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMenu.finish(WMenu menu)</TT>
<P>
<DL>
-<DD><A NAME="9137"></A>
-<A NAME="9138"></A>
-<A NAME="fn:WMenu.select_next"></A>
+<DD><A NAME="fn:WMenu.select_next"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMenu.select_next(WMenu menu)</TT>
<P>
<DL>
-<DD><A NAME="9139"></A>
-<A NAME="9140"></A>
-<A NAME="fn:WMenu.select_nth"></A>
+<DD><A NAME="fn:WMenu.select_nth"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMenu.select_nth(WMenu menu, integer n)</TT>
<P>
<DL>
-<DD><A NAME="9141"></A>
-<A NAME="9142"></A>
-<A NAME="fn:WMenu.select_prev"></A>
+<DD><A NAME="fn:WMenu.select_prev"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMenu.select_prev(WMenu menu)</TT>
<P>
<DL>
-<DD><A NAME="9143"></A>
-<A NAME="9144"></A>
-<A NAME="fn:WMenu.typeahead_clear"></A>
+<DD><A NAME="fn:WMenu.typeahead_clear"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WMenu.typeahead_clear(WMenu menu)</TT>
</H2>
<DL>
-<DD><A NAME="9342"></A>
-<A NAME="9343"></A>
-<A NAME="fn:mod_dock.set_floating_shown_on"></A>
+<DD><A NAME="fn:mod_dock.set_floating_shown_on"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void mod_dock.set_floating_shown_on(WMPlex mplex, string how)</TT>
<P>
<DL>
-<DD><A NAME="9345"></A>
-<A NAME="9346"></A>
-<A NAME="fn:WDock.attach"></A>
+<DD><A NAME="fn:WDock.attach"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WDock.attach(WDock dock, WRegion reg)</TT>
<P>
<DL>
-<DD><A NAME="9347"></A>
-<A NAME="9348"></A>
-<A NAME="fn:WDock.get"></A>
+<DD><A NAME="fn:WDock.get"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WDock.get(WDock dock)</TT>
<P>
<DL>
-<DD><A NAME="9349"></A>
-<A NAME="9350"></A>
-<A NAME="fn:WDock.resize"></A>
+<DD><A NAME="fn:WDock.resize"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WDock.resize(WDock dock)</TT>
<P>
<DL>
-<DD><A NAME="9351"></A>
-<A NAME="9352"></A>
-<A NAME="fn:WDock.set"></A>
+<DD><A NAME="fn:WDock.set"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WDock.set(WDock dock, table conftab)</TT>
<TD ALIGN="LEFT">string in <!-- MATH
$\{t,m,b\}\times\{t,c,b\}$
-->
-<SPAN CLASS="MATH"></SPAN></TD>
+<SPAN CLASS="MATH"><IMG
+ WIDTH="142" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
+ SRC="img6.png"
+ ALT="$\{t,m,b\}\times\{t,c,b\}$"></SPAN></TD>
<TD ALIGN="LEFT">Dock position.
Can only be used in floating mode.</TD>
</TR>
</H2>
<DL>
-<DD><A NAME="9451"></A>
-<A NAME="9452"></A>
-<A NAME="fn:mod_sp.set_shown"></A>
+<DD><A NAME="fn:mod_sp.set_shown"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool mod_sp.set_shown(WFrame sp, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Toggle displayed status of <TT>sp</TT>.
- The parameter <TT>how</TT> is one of (set/unset/toggle).
+ The parameter <TT>how</TT> is one of
+ `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>'.
+ The resulting status is returned.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="9453"></A>
-<A NAME="9454"></A>
-<A NAME="fn:mod_sp.set_shown_on"></A>
+<DD><A NAME="fn:mod_sp.set_shown_on"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool mod_sp.set_shown_on(WMPlex mplex, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Change displayed status of some scratchpad on <TT>mplex</TT> if one is
- found. The parameter <TT>how</TT> is one of (set/unset/toggle).
+ found. The parameter <TT>how</TT> is one of
+ `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>'.
+ The resulting status is returned.
</DD>
</DL>
</H2>
<DL>
-<DD><A NAME="9548"></A>
-<A NAME="9549"></A>
-<A NAME="fn:mod_statusbar.statusbars"></A>
+<DD><A NAME="fn:mod_statusbar.create"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_statusbar.create(param)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Create a statusbar. The possible parameters in the
+ table <TT>param</TT> are:
+
+<P>
+<TABLE CELLPADDING=3 WIDTH="100%">
+<TR><TD ALIGN="LEFT">Variable</TD>
+<TD ALIGN="LEFT">Type</TD>
+<TD ALIGN="LEFT">Description</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>template</TT></TD>
+<TD ALIGN="LEFT">string</TD>
+<TD ALIGN="LEFT">The template; see
+ Section <A HREF="node4.html#sec:statusbar">3.6</A>.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>pos</TT></TD>
+<TD ALIGN="LEFT">string</TD>
+<TD ALIGN="LEFT">Position: <TT>"tl"</TT>, <TT>"tr"</TT>,
+ <TT>"bl"</TT> or <TT>"br"</TT>
+ (for the obvious combinations of
+ top/left/bottom/right).</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>screen</TT></TD>
+<TD ALIGN="LEFT">integer</TD>
+<TD ALIGN="LEFT">Screen number to create the statusbar on.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>fullsize</TT></TD>
+<TD ALIGN="LEFT">boolean</TD>
+<TD ALIGN="LEFT">If set, the statusbar will waste
+ space instead of adapting to layout.</TD>
+</TR>
+<TR><TD ALIGN="LEFT"><TT>systray</TT></TD>
+<TD ALIGN="LEFT">boolaen</TD>
+<TD ALIGN="LEFT">Swallow (KDE protocol) systray icons.</TD>
+</TR>
+</TABLE>
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:mod_statusbar.inform"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_statusbar.inform(name, value)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Inform of a value.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:mod_statusbar.launch_statusd"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_statusbar.launch_statusd(cfg)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Load modules and launch <SPAN CLASS="textit">ion-statusd</SPAN> with configuration
+ table <TT>cfg</TT>. The options for each <SPAN CLASS="textit">ion-statusd</SPAN> monitor
+ script should be contained in the corresponding sub-table of <TT>cfg</TT>.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="fn:mod_statusbar.statusbars"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table mod_statusbar.statusbars()</TT>
</DD>
</DL>
+<P>
+
+ <DL>
+<DD><A NAME="fn:mod_statusbar.update"></A>
+</DD>
+<DT><STRONG>Synopsis:</STRONG></DT>
+<DD><TT>mod_statusbar.update(update_templates)</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>Update statusbar contents. To be called after series
+ of <A HREF="#fn:mod_statusbar.inform"><TT>mod_statusbar.inform</TT></A> calls.
+
+</DD>
+</DL>
+
<P>
<H3><A NAME="SECTION00771000000000000000">
<P>
<DL>
-<DD><A NAME="9551"></A>
-<A NAME="9552"></A>
-<A NAME="fn:WStatusBar.get_template_table"></A>
+<DD><A NAME="fn:WStatusBar.get_template_table"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table WStatusBar.get_template_table(WStatusBar sb)</TT>
<P>
<DL>
-<DD><A NAME="9553"></A>
-<A NAME="9554"></A>
-<A NAME="fn:WStatusBar.is_systray_extl"></A>
+<DD><A NAME="fn:WStatusBar.is_systray"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>bool WStatusBar.is_systray_extl(WStatusBar sb)</TT>
+<DD><TT>bool WStatusBar.is_systray(WStatusBar sb)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<P>
<DL>
-<DD><A NAME="9555"></A>
-<A NAME="9556"></A>
-<A NAME="fn:WStatusBar.set_systray"></A>
+<DD><A NAME="fn:WStatusBar.set_systray"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool WStatusBar.set_systray(WStatusBar sb, string how)</TT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Enable or disable use of <TT>sb</TT> as systray.
- The parameter <TT>how</TT> can be one of (set/unset/toggle).
+ The parameter <TT>how</TT> can be one of
+ `<TT>set</TT>', `<TT>unset</TT>', or `<TT>toggle</TT>'.
Resulting state is returned.
</DD>
<P>
<DL>
-<DD><A NAME="9557"></A>
-<A NAME="9558"></A>
-<A NAME="fn:WStatusBar.set_template"></A>
+<DD><A NAME="fn:WStatusBar.set_template"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WStatusBar.set_template(WStatusBar sb, string tmpl)</TT>
<P>
<DL>
-<DD><A NAME="9559"></A>
-<A NAME="9560"></A>
-<A NAME="fn:WStatusBar.set_template_table"></A>
+<DD><A NAME="fn:WStatusBar.set_template_table"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WStatusBar.set_template_table(WStatusBar sb, table t)</TT>
<P>
<DL>
-<DD><A NAME="9561"></A>
-<A NAME="9562"></A>
-<A NAME="fn:WStatusBar.update"></A>
+<DD><A NAME="fn:WStatusBar.update"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void WStatusBar.update(WStatusBar sb, table t)</TT>
</H2>
<DL>
-<DD><A NAME="9672"></A>
-<A NAME="9673"></A>
-<A NAME="fn:de.defstyle"></A>
+<DD><A NAME="fn:de.defstyle"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool de.defstyle(string name, table tab)</TT>
<P>
<DL>
-<DD><A NAME="9674"></A>
-<A NAME="9675"></A>
-<A NAME="fn:de.defstyle_rootwin"></A>
+<DD><A NAME="fn:de.defstyle_rootwin"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>bool de.defstyle_rootwin(WRootWin rootwin, string name, table tab)</TT>
<P>
<DL>
-<DD><A NAME="9676"></A>
-<A NAME="9677"></A>
-<A NAME="fn:de.reset"></A>
+<DD><A NAME="fn:de.reset"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>void de.reset()</TT>
<P>
<DL>
-<DD><A NAME="9678"></A>
-<A NAME="9679"></A>
-<A NAME="fn:de.substyle"></A>
+<DD><A NAME="fn:de.substyle"></A>
</DD>
<DT><STRONG>Synopsis:</STRONG></DT>
<DD><TT>table de.substyle(string pattern, table tab)</TT>
<P>
<DL>
-<DD><A NAME="9877"></A>
+<DD><A NAME="8232"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
</TR>
<TR><TD ALIGN="LEFT"><TT>dockapp</TT></TD>
<TD ALIGN="LEFT">bool</TD>
-<TD ALIGN="LEFT">Client window is a dockapp.</TD>
+<TD ALIGN="LEFT">Client window is a dock-app.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>maprq</TT></TD>
<TD ALIGN="LEFT">bool</TD>
<P>
<DL>
-<DD><A NAME="9878"></A>
+<DD><A NAME="8233"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
<P>
<DL>
-<DD><A NAME="9879"></A>
+<DD><A NAME="8234"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
<P>
<DL>
-<DD><A NAME="9880"></A>
+<DD><A NAME="8235"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
<P>
<DL>
-<DD><A NAME="9881"></A>
+<DD><A NAME="8236"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
</TR>
<TR><TD ALIGN="LEFT"><TT>mode</TT></TD>
<TD ALIGN="LEFT">string</TD>
-<TD ALIGN="LEFT"><TT>"switchonly"</TT>, <TT>"reorder"</TT>,
- <TT>"add"</TT> or <TT>"remove"</TT></TD>
+<TD ALIGN="LEFT">`<TT>switchonly</TT>', `<TT>reorder</TT>',
+ `<TT>add</TT>' or `<TT>remove</TT>'</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>sw</TT></TD>
<TD ALIGN="LEFT">bool</TD>
-<TD ALIGN="LEFT">Switch occured</TD>
+<TD ALIGN="LEFT">Switch occurred</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>sub</TT></TD>
<TD ALIGN="LEFT">WRegion</TD>
<P>
<DL>
-<DD><A NAME="9882"></A>
+<DD><A NAME="8237"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
<P>
<DL>
-<DD><A NAME="9883"></A>
+<DD><A NAME="8238"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
<P>
<DL>
-<DD><A NAME="9884"></A>
+<DD><A NAME="8239"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
</DD>
<DT><STRONG>Description:</STRONG></DT>
<DD>Called when Ion has done all initialisation and is almost ready to
- enter the mainloop, except no windows are yet being managed.
+ enter the main-loop, except no windows are yet being managed.
</DD>
</DL>
<P>
<DL>
-<DD><A NAME="9885"></A>
+<DD><A NAME="8240"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
<P>
<DL>
-<DD><A NAME="9886"></A>
+<DD><A NAME="8241"></A>
+
+</DD>
+<DT><STRONG>Hook name:</STRONG></DT>
+<DD><A NAME="ioncore_submap_ungrab_hook"></A><TT>ioncore_submap_ungrab_hook</TT>
+
+</DD>
+<DT><STRONG>Parameters:</STRONG></DT>
+<DD><TT>()</TT>
+
+</DD>
+<DT><STRONG>Description:</STRONG></DT>
+<DD>This hook is used to signal whenever Ion leaves the submap grab mode.
+
+</DD>
+</DL>
+
+<P>
+
+ <DL>
+<DD><A NAME="8242"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
</TR>
<TR><TD ALIGN="LEFT"><TT>res_frame</TT></TD>
<TD ALIGN="LEFT">WFrame</TD>
-<TD ALIGN="LEFT">A succesfull handler should
+<TD ALIGN="LEFT">A successful handler should
return the target frame here.</TD>
</TR>
</TABLE>
<P>
<DL>
-<DD><A NAME="9887"></A>
+<DD><A NAME="8243"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
<P>
<DL>
-<DD><A NAME="9888"></A>
+<DD><A NAME="8244"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
<P>
<DL>
-<DD><A NAME="9889"></A>
+<DD><A NAME="8245"></A>
</DD>
<DT><STRONG>Hook name:</STRONG></DT>
<TD ALIGN="LEFT">Tagging state has changed.</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>pseudoactivated</TT></TD>
-<TD ALIGN="LEFT">The region has become pseudoactive
+<TD ALIGN="LEFT">The region has become pseudo-active
(see below).</TD>
</TR>
<TR><TD ALIGN="LEFT"><TT>pseudoinactivated</TT></TD>
-<TD ALIGN="LEFT">The region is no longer pseudoactive.</TD>
+<TD ALIGN="LEFT">The region is no longer pseudo-active.</TD>
</TR>
</TABLE>
<P>
-A region is pseudoactive, when a) it is itself not active (does
+A region is pseudo-active, when a) it is itself not active (does
not not have the focus, and may not even have a window that could
have it), but b) some region managed by it is active.
<P>
+<H2><A NAME="SECTION007100000000000000000"></A>
+<A NAME="sec:miscref"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN> Miscellaneous
+</H2>
+
+<P>
+
+<H3><A NAME="SECTION007101000000000000000"></A>
+<A NAME="sec:sizepolicies"></A>
+<BR>
+<SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">10</SPAN>.<SPAN CLASS="arabic">1</SPAN> Size policies
+</H3>
+
+<P>
+Some functions accept a <TT>sizepolicy</TT> parameter. The possible
+values are:
+
+<P>
+<DIV ALIGN="LEFT">
+`<TT>default</TT>',
+`<TT>full</TT>',
+`<TT>full_bounds</TT>',
+`<TT>free</TT>',
+`<TT>free_glue</TT>',
+`<TT>northwest</TT>',
+`<TT>north</TT>',
+`<TT>northeast</TT>',
+`<TT>west</TT>',
+`<TT>center</TT>',
+`<TT>east</TT>',
+`<TT>southwest</TT>',
+`<TT>south</TT>',
+`<TT>southeast</TT>',
+`<TT>stretch_top</TT>',
+`<TT>stretch_bottom</TT>',
+`<TT>stretch_left</TT>',
+`<TT>stretch_right</TT>',
+`<TT>free_glue_northwest</TT>',
+`<TT>free_glue_north</TT>',
+`<TT>free_glue_northeast</TT>',
+`<TT>free_glue_west</TT>',
+`<TT>free_glue_center</TT>',
+`<TT>free_glue_east</TT>',
+`<TT>free_glue_southwest</TT>',
+`<TT>free_glue_south</TT>', and
+`<TT>free_glue_southeast</TT>'.
+
+</DIV>
+
+<P>
+The ``free'' policies allow the managed
+object to be moved around, whereas the other versions do not.
+The ``glue'' policies glue the object to some border, while allowing
+it to be moved away from it by user action, but not automatically.
+The ``stretch'' policies stretch the object along the given border,
+while the coordinate-based policies simply place the object along
+that border.
+
+<P>
+
<P>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
-<A NAME="tex2html355"
+<A NAME="tex2html383"
HREF="node8.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html349"
+<A NAME="tex2html377"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html343"
+<A NAME="tex2html371"
HREF="node6.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html351"
+<A NAME="tex2html379"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html353"
+<A NAME="tex2html381"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html356"
+<B> Next:</B> <A NAME="tex2html384"
HREF="node8.html">A. The GNU General</A>
-<B> Up:</B> <A NAME="tex2html350"
+<B> Up:</B> <A NAME="tex2html378"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html344"
+<B> Previous:</B> <A NAME="tex2html372"
HREF="node6.html">5. Scripting</A>
- <B> <A NAME="tex2html352"
+ <B> <A NAME="tex2html380"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html354"
+ <B> <A NAME="tex2html382"
HREF="node11.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html405"
+<A NAME="tex2html437"
HREF="node9.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html399"
+<A NAME="tex2html431"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html393"
+<A NAME="tex2html425"
HREF="node7.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html401"
+<A NAME="tex2html433"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html403"
+<A NAME="tex2html435"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html406"
+<B> Next:</B> <A NAME="tex2html438"
HREF="node9.html">B. Full class hierarchy</A>
-<B> Up:</B> <A NAME="tex2html400"
+<B> Up:</B> <A NAME="tex2html432"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html394"
+<B> Previous:</B> <A NAME="tex2html426"
HREF="node7.html">6. Function reference</A>
- <B> <A NAME="tex2html402"
+ <B> <A NAME="tex2html434"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html404"
+ <B> <A NAME="tex2html436"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
<UL CLASS="ChildLinks">
-<LI><A NAME="tex2html407"
+<LI><A NAME="tex2html439"
HREF="node8.html#SECTION00810000000000000000">Appendix: How to Apply These Terms to Your New Programs</A>
</UL>
<!--End of Table of Child-Links-->
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
-<A NAME="tex2html405"
+<A NAME="tex2html437"
HREF="node9.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html399"
+<A NAME="tex2html431"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html393"
+<A NAME="tex2html425"
HREF="node7.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html401"
+<A NAME="tex2html433"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html403"
+<A NAME="tex2html435"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html406"
+<B> Next:</B> <A NAME="tex2html438"
HREF="node9.html">B. Full class hierarchy</A>
-<B> Up:</B> <A NAME="tex2html400"
+<B> Up:</B> <A NAME="tex2html432"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html394"
+<B> Previous:</B> <A NAME="tex2html426"
HREF="node7.html">6. Function reference</A>
- <B> <A NAME="tex2html402"
+ <B> <A NAME="tex2html434"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html404"
+ <B> <A NAME="tex2html436"
HREF="node11.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
-<A NAME="tex2html420"
+<A NAME="tex2html452"
HREF="node10.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
-<A NAME="tex2html414"
+<A NAME="tex2html446"
HREF="ionconf.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
-<A NAME="tex2html408"
+<A NAME="tex2html440"
HREF="node8.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
-<A NAME="tex2html416"
+<A NAME="tex2html448"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
-<A NAME="tex2html418"
+<A NAME="tex2html450"
HREF="node11.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
-<B> Next:</B> <A NAME="tex2html421"
+<B> Next:</B> <A NAME="tex2html453"
HREF="node10.html">List of functions</A>
-<B> Up:</B> <A NAME="tex2html415"
+<B> Up:</B> <A NAME="tex2html447"
HREF="ionconf.html">Configuring and extending Ion3</A>
-<B> Previous:</B> <A NAME="tex2html409"
+<B> Previous:</B> <A NAME="tex2html441"
HREF="node8.html">A. The GNU General</A>
- <B> <A NAME="tex2html417"
+ <B> <A NAME="tex2html449"
HREF="node1.html">Contents</A></B>
- <B> <A NAME="tex2html419"
+ <B> <A NAME="tex2html451"
HREF="node11.html">Index</A></B>
<BR>
<BR></DIV>
|-->WHook
|-->WTimer
|-->WMoveresMode
- |-->WMgmtMode (mod_mgmtmode)
|-->WRegion
| |-->WClientWin
| |-->WWindow
This document is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-section entitled ''GNU General Public License'' for more details.
+section entitled ``GNU General Public License'' for more details.
\bigskip
This document is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-section entitled ''GNU General Public License'' for more details.
+section entitled ``GNU General Public License'' for more details.
<P>
PRE.preform { }
SPAN.textit { font-style: italic }
SPAN.arabic { }
+SPAN.textbf { font-weight: bold }
This document is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-section entitled ''GNU General Public License'' for more details.
+section entitled ``GNU General Public License'' for more details.
<P>
<P>
While Ion does not not have a truly object-oriented design
<A NAME="tex2html1"
- HREF="#foot212"><SUP><SPAN CLASS="arabic">1</SPAN></SUP></A>,
+ HREF="#foot210"><SUP><SPAN CLASS="arabic">1</SPAN></SUP></A>,
things that appear on the computer screen are, however, quite
-naturally expressed as such ''objects''. Therefore Ion implements
+naturally expressed as such ``objects''. Therefore Ion implements
a rather primitive OO system for these screen objects and some
other things.
<P>
For simplicity we consider only the essential-for-basic-configuration
Ioncore, <SPAN CLASS="textit">mod_tiling</SPAN> and <SPAN CLASS="textit">mod_query</SPAN> classes.
-See Appendix <A HREF="#app:fullhierarchy"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]" SRC="crossref.png"></A> for the full class hierachy visible
+See Appendix <A HREF="#app:fullhierarchy"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]" SRC="crossref.png"></A> for the full class hierarchy visible
to Lua side.
<P>
<P>
-<DIV ALIGN="CENTER"><A NAME="fig:classhierarchy"></A><A NAME="318"></A>
+<DIV ALIGN="CENTER"><A NAME="fig:classhierarchy"></A><A NAME="317"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 1:</STRONG>
Partial Ioncore, <SPAN CLASS="textit">mod_tiling</SPAN> and <SPAN CLASS="textit">mod_query</SPAN>
<P>
<DL>
<DT><STRONG>Obj</STRONG></DT>
-<DD><A NAME="324"></A>
+<DD><A NAME="323"></A>
Is the base of Ion's object system.
<P>
</DD>
<DT><STRONG>WRegion</STRONG></DT>
-<DD><A NAME="325"></A>
+<DD><A NAME="324"></A>
is the base class for everything corresponding to something on the
screen. Each object of type WRegion has a size and position
relative to the parent WRegion. While a big part of Ion
operates on these instead of more specialised classes, WRegion
- is a ''virtual'' base class in that there are no objects of ''pure''
+ is a ``virtual'' base class in that there are no objects of ``pure''
type WRegion; all concrete regions are objects of some class
that inherits WRegion.
<P>
</DD>
<DT><STRONG>WClientWin</STRONG></DT>
-<DD><A NAME="326"></A> is a class for
+<DD><A NAME="325"></A> is a class for
client window objects, the objects that window managers are
supposed to manage.
<P>
</DD>
<DT><STRONG>WWindow</STRONG></DT>
-<DD><A NAME="327"></A> is the base class for all
+<DD><A NAME="326"></A> is the base class for all
internal objects having an X window associated to them
(WClientWins also have X windows associated to them).
-<P>
-</DD>
-<DT><STRONG>WRootWin</STRONG></DT>
-<DD><A NAME="328"></A> is the class for
- root windows<A NAME="242"></A> of X screens<A NAME="243"></A>.
- Note that an ''X screen'' or root window is not necessarily a
- single physical screen<A NAME="244"></A> as a root window
- may be split over multiple screens when hacks such as
- Xinerama<A NAME="245"></A> are used. (Actually there can be only
- one root window when Xinerama is used.)
-
<P>
</DD>
<DT><STRONG>WMPlex</STRONG></DT>
-<DD>is a base class for all regions that''multiplex''
+<DD>is a base class for all regions that ``multiplex''
other regions. This means that of the regions managed by the multiplexer,
- only one can be displayed at a time. Classes that inhereit WMPlex
- include screens and frames.
+ only one can be displayed at a time.
<P>
</DD>
<DT><STRONG>WScreen</STRONG></DT>
-<DD><A NAME="329"></A> is the class for objects
- corresponding to physical screens. Screens may share a root
- window when the Xinerama extension is used as explained above.
+<DD><A NAME="327"></A> is an instance of WMPlex
+ for screens.
+
+<P>
+</DD>
+<DT><STRONG>WRootWin</STRONG></DT>
+<DD><A NAME="328"></A> is the class for
+ root windows<A NAME="244"></A> of X screens<A NAME="245"></A>.
+ It is an instance of WScreen.
+ Note that an ``X screen'' or root window is not necessarily a
+ single physical screen<A NAME="247"></A> as a root window
+ may be split over multiple screens when ugly hacks such as
+ Xinerama<A NAME="248"></A> are used. (Actually there can be only
+ one root window when Xinerama is used.)
<P>
</DD>
<DT><STRONG>WFrame</STRONG></DT>
-<DD><A NAME="330"></A> is the class for frames.
- While most Ion's objects have no graphical presentation, frames basically
- add to WMPlexes the decorations around client windows
- (borders, tabs).
+<DD><A NAME="329"></A> is the class for frames.
+ While most Ion's objects have no graphical presentation, frames
+ basically add to WMPlexes the decorations around client
+ windows (borders, tabs).
<P>
</DD>
<DT><STRONG>WGroup</STRONG></DT>
-<DD><A NAME="331"></A> is the base class for groups.
+<DD><A NAME="330"></A> is the base class for groups.
Particular types of groups are workspaces
- (WGroupWS<A NAME="332"></A>)
+ (WGroupWS<A NAME="331"></A>)
and groups of client windows
- (WGroupCW<A NAME="333"></A>).
+ (WGroupCW<A NAME="332"></A>).
</DD>
</DL>
<P>
<DL>
<DT><STRONG>WTiling</STRONG></DT>
-<DD><A NAME="335"></A> is the class for tilings
+<DD><A NAME="334"></A> is the class for tilings
of frames.
</DD>
<DT><STRONG>WSplit</STRONG></DT>
-<DD><A NAME="336"></A> (or, more specifically, classes
+<DD><A NAME="335"></A> (or, more specifically, classes
that inherit it) encode the WTiling tree structure.
</DD>
</DL>
<P>
<DL>
<DT><STRONG>WInput</STRONG></DT>
-<DD><A NAME="338"></A> is a virtual base class for the
+<DD><A NAME="337"></A> is a virtual base class for the
two classes below.
</DD>
<DT><STRONG>WEdln</STRONG></DT>
-<DD><A NAME="339"></A> is the class for the ''queries'',
+<DD><A NAME="338"></A> is the class for the ``queries'',
the text inputs that usually appear at bottoms of frames and sometimes
- screens. Queries are the functional equivalent of ''mini buffers'' in
+ screens. Queries are the functional equivalent of ``mini buffers'' in
many text editors.
</DD>
<DT><STRONG>WMessage</STRONG></DT>
-<DD><A NAME="340"></A> implements the boxes for
+<DD><A NAME="339"></A> implements the boxes for
warning and other messages that Ion may wish to display to the user.
These also usually appear at bottoms of frames.
</DD>
</DL>
<P>
-There are also some other ''proxy'' classes that do not refer
+There are also some other ``proxy'' classes that do not refer
to objects on the screen. The only important one of these for
basic configuration is WMoveresMode that is used for
binding callbacks in the move and resize mode.
<SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN> Parent-child relations</A>
</H3>
Each object of type WRegion has a parent and possibly a manager
-associated to it. The parent<A NAME="281"></A> for an object is always a
+associated to it. The parent<A NAME="280"></A> for an object is always a
WWindow and for WRegion with an X window (WClientWin,
WWindow) the parent WWindow is given by the same relation of
the X windows. For other WRegions the relation is not as clear.
<P>
-<DIV ALIGN="CENTER"><A NAME="fig:parentship"></A><A NAME="292"></A>
+<DIV ALIGN="CENTER"><A NAME="fig:parentship"></A><A NAME="291"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2:</STRONG>
Most common parent-child relations</CAPTION>
<P>
WRegions have very little control over their children as a parent.
-The manager<A NAME="296"></A> WRegion has much more control over its
+The manager<A NAME="295"></A> WRegion has much more control over its
managed WRegions. Managers, for example, handle resize requests,
focusing and displaying of the managed regions. Indeed the manager--managed
relationship gives a better picture of the logical ordering of objects on
<P>
-<DIV ALIGN="CENTER"><A NAME="fig:managership"></A><A NAME="304"></A>
+<DIV ALIGN="CENTER"><A NAME="fig:managership"></A><A NAME="303"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 3:</STRONG>
Most common manager-managed relations</CAPTION>
<P>
<BR><HR><H4>Footnotes</H4>
<DL>
-<DT><A NAME="foot212">... design</A><A
+<DT><A NAME="foot210">... design</A><A
HREF="node2.html#tex2html1"><SUP><SPAN CLASS="arabic">1</SPAN></SUP></A></DT>
<DD>the author doesn't like such artificial designs
<P>
First, to get things clear, what are considered objects here are C
-structures containing a properly initialized <A NAME="427"></A>
+structures containing a properly initialised <A NAME="426"></A>
structure defined in <SPAN CLASS="textit">ioncore/obj.h</SPAN> as the first element (or the
first element of the structure which is the first element and so on which
gives rise to inheritance). The WObj structure contains a pointer
-to a WObjDescr<A NAME="429"></A> class type info structure and
-a list of so called ''watches''. The WObjDescr structure simply
+to a WObjDescr<A NAME="428"></A> class type info structure and
+a list of so called ``watches''. The WObjDescr structure simply
lists the class name, a table of dynamic functions and a pointer to
-deinitialisation function (or ''destructor'').
+deinitialisation function (or ``destructor'').
<P>
Ion does not do any reference counting, garbage collecting or other
fancy things related to automatic safe freeing of objects with its
simplistic object system. Instead special watches (the WWatch
-<A NAME="430"></A> structure) may be used to create safe references to
+<A NAME="429"></A> structure) may be used to create safe references to
objects that might be destroyed during the time the specific pointer is
needed. When an object is destroyed, its list of watches is processed,
setting the pointers in the watches to NULL and the watch handlers for
<TD ALIGN="LEFT"> </TD>
</TR>
<TR><TD ALIGN="RIGHT">t</TD>
-<TD ALIGN="LEFT">ExtlTab<A NAME="520"></A></TD>
+<TD ALIGN="LEFT">ExtlTab<A NAME="519"></A></TD>
<TD ALIGN="LEFT">Reference to Lua table</TD>
</TR>
<TR><TD ALIGN="RIGHT">f</TD>
-<TD ALIGN="LEFT">ExltFn<A NAME="521"></A></TD>
+<TD ALIGN="LEFT">ExltFn<A NAME="520"></A></TD>
<TD ALIGN="LEFT">Reference to Lua function.</TD>
</TR>
<TR><TD ALIGN="RIGHT">o</TD>
<P>
You've seen the terms level 1 and 2 call handler mentioned above.
-<A NAME="490"></A>
+<A NAME="489"></A>
The Lua support code uses two so called call handlers to convert and check
the types of parameters passed from Lua to C and back to Lua. The first
one of these call handlers is the same for all exported functions and
<P>
The functions
-<TT>extl_call</TT><A NAME="514"></A>,
-<TT>extl_call_named</TT><A NAME="515"></A>,
-<TT>extl_dofile</TT><A NAME="516"></A> and
-<TT>extl_dostring</TT><A NAME="517"></A>
+<TT>extl_call</TT><A NAME="513"></A>,
+<TT>extl_call_named</TT><A NAME="514"></A>,
+<TT>extl_dofile</TT><A NAME="515"></A> and
+<TT>extl_dostring</TT><A NAME="516"></A>
call a referenced function (ExtlFn), named function, execute a
string and a file, respectively. The rest of the parameters for all these
functions are similar. The 'spec' argument is a string of identifier
<P>
Sometimes it is necessary to block calls to all but a limited set of
Ion functions. This can be accomplished with
-<TT>extl_set_safelist</TT><A NAME="518"></A>.
+<TT>extl_set_safelist</TT><A NAME="517"></A>.
The parameter to this function is a NULL-terminated array of strings
and the return value is a similar old safelist.
The call <TT>extl_set_safelist(NULL)</TT> removes any safelist and allows
<P>
Configuration files should be read as before with the function
-<TT>read_config_for</TT><A NAME="519"></A>
+<TT>read_config_for</TT><A NAME="518"></A>
except that the list of known options is no longer present.
<P>
<P>
To keep Ion's code as simple as possible yet safe, there are restrictions
when the WObj
-<TT>destroy_obj</TT><A NAME="618"></A>
+<TT>destroy_obj</TT><A NAME="617"></A>
function that calls watches, the deinit routine and frees memory may
-be called directly. In all other cases the
-<TT>defer_destroy</TT><A NAME="619"></A>
+be called directly. In all other cases the <TT>mainloop_defer_destroy</TT><A NAME="618"></A>
function should be used to defer the call of <TT>destroy_obj</TT> until
Ioncore returns to its main event loop.
when the function created a frame to manage some other object but for
some reason failed to reparent the object to this frame.
</LI>
-<LI>In a deferred action handler set with
- <TT>defer_action</TT><A NAME="620"></A>.
+<LI>In a deferred action handler set with <TT>mainloop_defer_action</TT><A NAME="619"></A>.
Like deferred destroys, other deferred actions are called when
Ioncore has returned to the main loop.
</LI>
<P>
If there are no serious side effects from deferring destroying the
object or you're unsure whether it is safe to destroy the object
-immediately, use <TT>defer_destroy</TT>.
+immediately, use <TT>mainloop_defer_destroy</TT>.
<P>
<TR><TD ALIGN="LEFT"><TT>char*</TT></TD>
<TD ALIGN="LEFT">The string is the caller's responsibility and it
<SPAN CLASS="textit">must</SPAN> free it when no longer needed.</TD>
-<TD ALIGN="LEFT">The called function may modify the string but the ''owner'' of
+<TD ALIGN="LEFT">The called function may modify the string but the ``owner'' of
the string is case-dependant.</TD>
</TR>
</TABLE>
</H1>
<P>
-If you want to submit patches to Ion, you MUST follow my coding
+If you want to submit patches to Ion, you <SPAN CLASS="textbf">must</SPAN> follow my coding
style, even if you think it is the root of all evil. We don't want
the code to be an incomprehensible mess of styles and I have better
things to do than fix other people's style to match mine. The style
<P>
<UL>
-<LI>Indentations of 4 with <SPAN CLASS="textit">tab size=4</SPAN>.
+<LI>Indentations of 4 with spaces.
<P>
</LI>
Index</A>
</H2><HR><DL>
<DD><STRONG>call handler</STRONG>
- : <A HREF="node4.html#490"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
-<DD><STRONG><TT>defer_action</TT></STRONG>
- : <A HREF="node5.html#620"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG><TT>defer_destroy</TT></STRONG>
- : <A HREF="node5.html#619"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node4.html#489"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
<DD><STRONG><TT>destroy_obj</TT></STRONG>
- : <A HREF="node5.html#618"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node5.html#617"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>extl_call</TT></STRONG>
- : <A HREF="node4.html#514"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#513"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
<DD><STRONG><TT>extl_call_named</TT></STRONG>
- : <A HREF="node4.html#515"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#514"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
<DD><STRONG><TT>extl_dofile</TT></STRONG>
- : <A HREF="node4.html#516"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#515"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
<DD><STRONG><TT>extl_dostring</TT></STRONG>
- : <A HREF="node4.html#517"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#516"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
<DD><STRONG><TT>extl_set_safelist</TT></STRONG>
- : <A HREF="node4.html#518"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
+ : <A HREF="node4.html#517"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
<DD><STRONG>ExtlFn</STRONG>
- : <A HREF="node4.html#521"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>ExtlTab</STRONG>
: <A HREF="node4.html#520"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>ExtlTab</STRONG>
+ : <A HREF="node4.html#519"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>mainloop_defer_action</TT></STRONG>
+ : <A HREF="node5.html#619"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG><TT>mainloop_defer_destroy</TT></STRONG>
+ : <A HREF="node5.html#618"><SPAN CLASS="arabic">4</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>manager</STRONG>
- : <A HREF="node2.html#296"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#295"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>Obj</STRONG>
- : <A HREF="node2.html#324"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#323"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>parent</STRONG>
- : <A HREF="node2.html#281"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#280"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG><TT>read_config_for</TT></STRONG>
- : <A HREF="node4.html#519"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
+ : <A HREF="node4.html#518"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">4</SPAN></A>
<DD><STRONG>root window</STRONG>
- : <A HREF="node2.html#242"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#244"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>screen</STRONG><DL>
-<DD><STRONG>physical</STRONG> : <A HREF="node2.html#244"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>X</STRONG> : <A HREF="node2.html#243"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>physical</STRONG> : <A HREF="node2.html#247"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>X</STRONG> : <A HREF="node2.html#245"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
</DL>
<DD><STRONG>WClientWin</STRONG>
- : <A HREF="node2.html#326"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#325"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WEdln</STRONG>
- : <A HREF="node2.html#339"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#338"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WFrame</STRONG>
- : <A HREF="node2.html#330"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#329"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WGroup</STRONG>
- : <A HREF="node2.html#331"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#330"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WGroupCW</STRONG>
- : <A HREF="node2.html#333"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WGroupWS</STRONG>
: <A HREF="node2.html#332"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WGroupWS</STRONG>
+ : <A HREF="node2.html#331"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WInput</STRONG>
- : <A HREF="node2.html#338"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#337"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WMessage</STRONG>
- : <A HREF="node2.html#340"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#339"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WObj</STRONG>
- : <A HREF="node3.html#427"><SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node3.html#426"><SPAN CLASS="arabic">2</SPAN></A>
<DD><STRONG>WObjDescr</STRONG>
- : <A HREF="node3.html#429"><SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node3.html#428"><SPAN CLASS="arabic">2</SPAN></A>
<DD><STRONG>WRegion</STRONG>
- : <A HREF="node2.html#325"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#324"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WRootWin</STRONG>
: <A HREF="node2.html#328"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WScreen</STRONG>
- : <A HREF="node2.html#329"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#327"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WSplit</STRONG>
- : <A HREF="node2.html#336"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
-<DD><STRONG>WTiling</STRONG>
: <A HREF="node2.html#335"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+<DD><STRONG>WTiling</STRONG>
+ : <A HREF="node2.html#334"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>WWatch</STRONG>
- : <A HREF="node3.html#430"><SPAN CLASS="arabic">2</SPAN></A>
+ : <A HREF="node3.html#429"><SPAN CLASS="arabic">2</SPAN></A>
<DD><STRONG>WWindow</STRONG>
- : <A HREF="node2.html#327"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#326"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
<DD><STRONG>Xinerama</STRONG>
- : <A HREF="node2.html#245"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
+ : <A HREF="node2.html#248"><SPAN CLASS="arabic">1</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
</DL>
The command line arguments were: <BR>
<STRONG>latex2html</STRONG> <TT>-show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 4 ionnotes</TT>
<P>
-The translation was initiated by tuomov on 2007-03-18
+The translation was initiated by tuomov on 2007-05-06
<BR><HR>
</BODY>
% URL settings
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\urlstyle{rm}
-\newcommand{\centerurl}[1]{\begin{center}\url{#1}\end{center}}
+\urlstyle{tt}
% listings package
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%begin{latexonly}
\newcommand{\key}[1]{\mbox{\textbf{#1}}}
\newcommand{\code}[1]{\lstinline!#1!}
+\newcommand{\codestr}[1]{`\texttt{#1}'}
\newcommand{\var}[1]{\lstinline!#1!}
\newcommand{\command}[1]{\lstinline!#1!}
\newcommand{\key}[1]{\textbf{#1}}
\newcommand{\code}[1]{\texttt{#1}}
+\newcommand{\codestr}[1]{`\texttt{#1}'}
\newcommand{\var}[1]{\texttt{#1}}
\newcommand{\command}[1]{\texttt{#1}}
--- /dev/null
+
+\subsection{Size policies}
+\label{sec:sizepolicies}
+
+Some functions accept a \var{sizepolicy} parameter. The possible
+values are:
+
+\begin{flushleft}
+\codestr{default},
+\codestr{full},
+\codestr{full\_bounds},
+\codestr{free},
+\codestr{free\_glue},
+\codestr{northwest},
+\codestr{north},
+\codestr{northeast},
+\codestr{west},
+\codestr{center},
+\codestr{east},
+\codestr{southwest},
+\codestr{south},
+\codestr{southeast},
+\codestr{stretch\_top},
+\codestr{stretch\_bottom},
+\codestr{stretch\_left},
+\codestr{stretch\_right},
+\codestr{free\_glue\_northwest},
+\codestr{free\_glue\_north},
+\codestr{free\_glue\_northeast},
+\codestr{free\_glue\_west},
+\codestr{free\_glue\_center},
+\codestr{free\_glue\_east},
+\codestr{free\_glue\_southwest},
+\codestr{free\_glue\_south}, and
+\codestr{free\_glue\_southeast}.
+\end{flushleft}
+
+The ``free'' policies allow the managed
+object to be moved around, whereas the other versions do not.
+The ``glue'' policies glue the object to some border, while allowing
+it to be moved away from it by user action, but not automatically.
+The ``stretch'' policies stretch the object along the given border,
+while the coordinate-based policies simply place the object along
+that border.
While Ion does not not have a truly object-oriented design
\footnote{the author doesn't like such artificial designs},
things that appear on the computer screen are, however, quite
-naturally expressed as such ''objects''. Therefore Ion implements
+naturally expressed as such ``objects''. Therefore Ion implements
a rather primitive OO system for these screen objects and some
other things.
For simplicity we consider only the essential-for-basic-configuration
Ioncore, \file{mod\_tiling} and \file{mod\_query} classes.
-See Appendix \ref{app:fullhierarchy} for the full class hierachy visible
+See Appendix \ref{app:fullhierarchy} for the full class hierarchy visible
to Lua side.
\subsection{Class hierarchy}
screen. Each object of type \type{WRegion} has a size and position
relative to the parent \type{WRegion}. While a big part of Ion
operates on these instead of more specialised classes, \type{WRegion}
- is a ''virtual'' base class in that there are no objects of ''pure''
+ is a ``virtual'' base class in that there are no objects of ``pure''
type \type{WRegion}; all concrete regions are objects of some class
that inherits \type{WRegion}.
internal objects having an X window associated to them
(\type{WClientWins} also have X windows associated to them).
+ \item[\type{WMPlex}] is a base class for all regions that ``multiplex''
+ other regions. This means that of the regions managed by the multiplexer,
+ only one can be displayed at a time.
+
+ \item[\type{WScreen}]\indextype{WScreen} is an instance of \type{WMPlex}
+ for screens.
+
\item[\type{WRootWin}]\indextype{WRootWin} is the class for
root windows\index{root window} of X screens\index{screen!X}.
- Note that an ''X screen'' or root window is not necessarily a
- single physical screen\index{screen!physical} as a root window
- may be split over multiple screens when hacks such as
+ It is an instance of \type{WScreen}.
+ Note that an ``X screen'' or root window is not necessarily a
+ single physical screen\index{screen!physical} as a root window
+ may be split over multiple screens when ugly hacks such as
Xinerama\index{Xinerama} are used. (Actually there can be only
- one root window when Xinerama is used.)
+ one root window when Xinerama is used.)
- \item[\type{WMPlex}] is a base class for all regions that''multiplex''
- other regions. This means that of the regions managed by the multiplexer,
- only one can be displayed at a time. Classes that inhereit \type{WMPlex}
- include screens and frames.
-
- \item[\type{WScreen}]\indextype{WScreen} is the class for objects
- corresponding to physical screens. Screens may share a root
- window when the Xinerama extension is used as explained above.
-
\item[\type{WFrame}]\indextype{WFrame} is the class for frames.
- While most Ion's objects have no graphical presentation, frames basically
- add to \type{WMPlex}es the decorations around client windows
- (borders, tabs).
+ While most Ion's objects have no graphical presentation, frames
+ basically add to \type{WMPlex}es the decorations around client
+ windows (borders, tabs).
\item[\type{WGroup}]\indextype{WGroup} is the base class for groups.
Particular types of groups are workspaces
\begin{description}
\item[\type{WInput}]\indextype{WInput} is a virtual base class for the
two classes below.
- \item[\type{WEdln}]\indextype{WEdln} is the class for the ''queries'',
+ \item[\type{WEdln}]\indextype{WEdln} is the class for the ``queries'',
the text inputs that usually appear at bottoms of frames and sometimes
- screens. Queries are the functional equivalent of ''mini buffers'' in
+ screens. Queries are the functional equivalent of ``mini buffers'' in
many text editors.
\item[\type{WMessage}]\indextype{WMessage} implements the boxes for
warning and other messages that Ion may wish to display to the user.
These also usually appear at bottoms of frames.
\end{description}
-There are also some other ''proxy'' classes that do not refer
+There are also some other ``proxy'' classes that do not refer
to objects on the screen. The only important one of these for
basic configuration is \type{WMoveresMode} that is used for
binding callbacks in the move and resize mode.
\section{Object system implementation}
First, to get things clear, what are considered objects here are C
-structures containing a properly initialized \type\indextype{WObj}
+structures containing a properly initialised \type\indextype{WObj}
structure defined in \file{ioncore/obj.h} as the first element (or the
first element of the structure which is the first element and so on which
gives rise to inheritance). The \type{WObj} structure contains a pointer
to a \type{WObjDescr}\indextype{WObjDescr} class type info structure and
-a list of so called ''watches''. The \type{WObjDescr} structure simply
+a list of so called ``watches''. The \type{WObjDescr} structure simply
lists the class name, a table of dynamic functions and a pointer to
-deinitialisation function (or ''destructor'').
+deinitialisation function (or ``destructor'').
Ion does not do any reference counting, garbage collecting or other
fancy things related to automatic safe freeing of objects with its
keyboard-operated in-frame menus.
\item[\file{mod\_statusbar}] Module that implements a statusbar that
can be adaptively embedded in each workspace's layout.
- \item[\file{mod\_dock}] Module for docking Window Maker dockapps.
+ \item[\file{mod\_dock}] Module for docking Window Maker dock-apps.
The dock can both float and be embedded as the statusbar.
\item[\file{mod\_sp}] This module implements a scratchpad frame that can
be toggled on/off everywhere. Think of the 'console' in some
first-person shooters.
- \item[\file{mod\_mgmtmode}] Support module for implementing ''management
- modes'' with a XOR-frame similar to move/resize mode around selected
- region.
\item[\file{mod\_sm}] Session management support module.
\emph{Loaded automatically when needed!}
\end{description}
So-called drawing engines are also implemented as a modules,
but they are not discussed here; see chapter \ref{chap:gr}.
-The stock configuration for the 'ion3' executable loads all of the modules
-mentioned above except \file{mod\_dock} and file{mod\_mgmtmode}.
-The stock configuration for the 'pwm3' executable (which differs from the
-'ion3' executable in a few configuration details, such as Xinerama usage)
+The stock configuration for the \file{ion3} executable loads all of the
+modules mentioned above except \file{mod\_dock}.
+The stock configuration for the \file{pwm3} executable (which differs
+from the \file{ion3} executable in a few configuration details)
loads another set of modules.
\section{Writing \command{ion-statusd} monitors}
+\label{sec:statusd}
All statusbar meters that do not monitor the internal state of Ion should
go in the separate \command{ion-statusd} program.
-Whenever the user requests a meter \code{\%foo} or \code{\%foo_bar} to be
-inserted in a statusbar, \file{mod\_statusbar} asks \command{ion-statusd} to
-load \fnref{statusd_foo.lua} on its search path (same as that for Ion-side
+Whenever the user requests a meter \codestr{\%foo} or \codestr{\%foo\_bar} to
+be inserted in a statusbar, \file{mod\_statusbar} asks \command{ion-statusd}
+to load \fnref{statusd_foo.lua} on its search path (same as that for Ion-side
scripts). This script should then supply all meters with the initial part
-'\code{foo}'.
+\codestr{foo}.
To provide this value, the script should simply call \code{statusd.inform}
with the name of the meter and the value as a string.
facilitate expected width calculation by \file{mod\_statusbar}, and
may provide a 'hint' for colour-coding the value. The interpretation
of hints depends on the graphical style in use, and currently the
-stock styles support the \code{normal}, \code{important} and
-\code{critical} hints.
+stock styles support the \codestr{normal}, \codestr{important} and
+\codestr{critical} hints.
-In our example of the 'foo monitor', at script init we might broadcast
+In our example of the 'foo monitor', at script initialisation we might broadcast
the template as follows:
\begin{verbatim}
This chapter documents some additional features of the Ion configuration
and scripting interface that can be used for more advanced scripting than
-the basic configuration exlained in chapter \ref{chap:config}.
+the basic configuration explained in chapter \ref{chap:config}.
\section{Hooks}
\label{sec:hooks}
Hooks are lists of functions to be called when a certain event occurs.
-There are two types of them; normal and ''alternative'' hooks. Normal
+There are two types of them; normal and ``alternative'' hooks. Normal
hooks do not return anything, but alt-hooks should return a boolean
-indicating whether it handled its assigned task succesfully. In the case
+indicating whether it handled its assigned task successfully. In the case
that \var{true} is returned, remaining handlers are not called.
Hook handlers are registered by first finding the hook
with \fnref{ioncore.get_hook} and then calling \fnref{WHook.add}
-on the (succesfull) result with the handler as parameter. Similarly
+on the (successful) result with the handler as parameter. Similarly
handlers are unregistered with \fnref{WHook.remove}. For example:
\begin{verbatim}
the hook reference, section \ref{sec:hookref}.
-Note that many of the hooks are called in ''protected mode'' and can not
+Note that many of the hooks are called in ``protected mode'' and can not
use any functions that modify Ion's internal state. TODO: More detailed
documentation when this is final.
\subsection{Direct object references}
-All Ion objects are passed to Lua scriptss as 'userdatas', and you may
+All Ion objects are passed to Lua scripts as 'userdatas', and you may
safely store such object references for future use. The C-side object
may be destroyed while Lua still refers to the object. All exported
functions gracefully fail in such a case, but if you need to explicitly
look_brownsteel.lua look_clean.lua look_dusky.lua \
look_greyviolet.lua look_ios.lua look_cleanviolet.lua \
look_simpleblue.lua look_cleanios.lua look_newviolet.lua \
- lookcommon_clean.lua lookcommon_clean_stdisp.lua \
- lookcommon_clean_tab.lua lookcommon_clean_frame.lua \
- lookcommon_emboss.lua lookcommon_emboss_stdisp.lua \
- lookcommon_emboss_tab.lua lookcommon_emboss_frame.lua
+ look_greenlight.lua \
+ lookcommon_clean.lua lookcommon_emboss.lua
######################################
--dopath("mod_dock")
--dopath("mod_sp")
+
+--
+-- Common customisations
+--
+
+-- Uncommenting the following lines should get you plain-old-menus instead
+-- of query-menus.
+
+--defbindings("WScreen", {
+-- kpress(ALTMETA.."F12", "mod_menu.menu(_, _sub, 'mainmenu', {big=true})"),
+--})
+--
+--defbindings("WMPlex.toplevel", {
+-- kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
+--})
+
kpress(META.."G", "mod_query.query_gotoclient(_)"),
bdoc("Display context menu."),
- --kpress(META.."M", "mod_menu.menu(_, _chld, 'ctxmenu')"),
- kpress(META.."M", "mod_query.query_menu(_, _chld, 'ctxmenu', 'Context menu:')"),
+ --kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
+ kpress(META.."M", "mod_query.query_menu(_, _sub, 'ctxmenu', 'Context menu:')"),
})
}),
bdoc("Display context menu."),
- mpress("Button3", "mod_menu.pmenu(_, _chld, 'ctxmenu')"),
+ mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"),
bdoc("Begin move/resize mode."),
kpress(META.."R", "WFrame.begin_kbresize(_)"),
-- Frames for transient windows ignore this bindmap
defbindings("WFrame.toplevel", {
- bdoc("Tag current object within the frame."),
- kpress(META.."T", "WRegion.set_tagged(_sub, 'toggle')", "_sub:non-nil"),
-
bdoc("Query for a client window to attach."),
kpress(META.."A", "mod_query.query_attachclient(_)"),
submap(META.."K", {
+ -- Display tab numbers when modifiers are released
+ submap_wait("ioncore.tabnum.show(_)"),
+
bdoc("Switch to n:th object within the frame."),
kpress("1", "WFrame.switch_nth(_, 0)"),
kpress("2", "WFrame.switch_nth(_, 1)"),
acrobatic = true
}
--- Galeon's find dialog does not always have its transient_for hint
--- set when the window is being mapped.
-defwinprop{
- class = "galeon_browser",
- instance = "dialog_find",
- transient_mode = "current",
-}
defwinprop{
class = "Xpdf",
}
+-- Put all dockapps in the statusbar's systray, also adding the missing
+-- size hints necessary for this to work.
+defwinprop{
+ is_dockapp = true,
+ statusbar = "systray",
+ max_size = { w = 64, h = 64},
+ min_size = { w = 64, h = 64},
+}
+
+
-- You might want to enable these if you really must use XMMS.
--[[
defwinprop{
text_align = "center",
})
-de.defstyle("frame", {
- based_on = "*",
- shadow_colour = "#404040",
- highlight_colour = "#707070",
- padding_colour = "#505050",
- background_colour = "#000000",
- foreground_colour = "#ffffff",
- padding_pixels = 1,
- highlight_pixels = 1,
- shadow_pixels = 1,
-})
-
de.defstyle("tab", {
- based_on = "*",
font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
de.substyle("active-selected", {
shadow_colour = "#304050",
text_align = "center",
})
-
de.defstyle("input", {
- based_on = "*",
shadow_colour = "#404040",
highlight_colour = "#707070",
background_colour = "#000000",
})
de.defstyle("input-menu", {
- based_on = "*",
de.substyle("active", {
shadow_colour = "#304050",
highlight_colour = "#708090",
})
de.defstyle("tab", {
- based_on = "*",
font = "-misc-fixed-medium-r-*-*-13-*-*-*-*-60-*-*",
de.substyle("active-selected", {
shadow_colour = "white",
})
de.defstyle("input", {
- based_on = "*",
- shadow_colour = "grey",
- highlight_colour = "grey",
- background_colour = "#545d75",
foreground_colour = "white",
- padding_pixels = 1,
- highlight_pixels = 1,
- shadow_pixels = 1,
- border_style = "elevated",
de.substyle("*-cursor", {
background_colour = "white",
foreground_colour = "#545d75",
dopath("lookcommon_clean")
de.defstyle("tab-menuentry-big", {
- based_on = "tab-menuentry",
padding_pixels = 7,
+ font = "-misc-fixed-medium-r-*-*-18-*-*-*-*-*-*-*",
})
gr.refresh()
})
de.defstyle("tab", {
- based_on = "*",
font = "-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*",
de.substyle("active-selected", {
shadow_colour = "#f0f066",
})
de.defstyle("input-edln", {
- based_on = "*",
de.substyle("*-cursor", {
background_colour = "#000000",
foreground_colour = "#d8d8d8",
de.defstyle("tab", {
- based_on = "*",
font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
de.substyle("active-selected", {
de.defstyle("input", {
- based_on = "*",
text_align = "left",
spacing = 1,
-- Greyish violet background
text_align = "center",
})
-de.defstyle("frame", {
- based_on = "*",
- shadow_colour = "#404040",
- highlight_colour = "#707070",
- padding_colour = "#505050",
- background_colour = "#000000",
- foreground_colour = "#ffffff",
- padding_pixels = 2,
- highlight_pixels = 1,
- shadow_pixels = 1,
-})
-
de.defstyle("tab", {
- based_on = "*",
font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
de.substyle("active-selected", {
shadow_colour = "#452727",
})
de.defstyle("input", {
- based_on = "*",
shadow_colour = "#404040",
highlight_colour = "#707070",
background_colour = "#000000",
})
de.defstyle("input-menu", {
- based_on = "*",
de.substyle("active", {
shadow_colour = "#452727",
highlight_colour = "#866868",
--- /dev/null
+--
+-- look_greenlight for Ion's default drawing engine.
+--
+
+if not gr.select_engine("de") then
+ return
+end
+
+-- Clear existing styles from memory.
+de.reset()
+
+-- Base style
+de.defstyle("*", {
+ highlight_colour = "#666666",
+ shadow_colour = "#666666",
+ background_colour = "#333333",
+ foreground_colour = "#cccccc",
+
+ shadow_pixels = 1,
+ highlight_pixels = 1,
+ padding_pixels = 1,
+ spacing = 0,
+ border_style = "elevated",
+ border_sides = "tb",
+
+ font = "-*-helvetica-medium-r-normal-*-14-*-*-*-*-*-*-*",
+ text_align = "center",
+})
+
+
+de.defstyle("frame", {
+ background_colour = "#000000",
+ transparent_background = false,
+})
+
+
+de.defstyle("tab", {
+ font = "-*-helvetica-medium-r-normal-*-10-*-*-*-*-*-*-*",
+ spacing = 1,
+
+ de.substyle("active-selected", {
+ highlight_colour = "#8ac267",
+ shadow_colour = "#8ac267",
+ background_colour = "#354743",
+ }),
+
+ de.substyle("inactive-selected", {
+ highlight_colour = "#6aa247",
+ shadow_colour = "#6aa247",
+ }),
+})
+
+
+de.defstyle("input", {
+ text_align = "left",
+ spacing = 1,
+
+ de.substyle("*-selection", {
+ background_colour = "#354743",
+ }),
+
+ de.substyle("*-cursor", {
+ background_colour = "#8ac267",
+ foreground_colour = "#333333",
+ }),
+})
+
+
+dopath("lookcommon_clean")
+
+
+-- Refresh objects' brushes.
+gr.refresh()
text_align = "center",
})
-de.defstyle("frame", {
- based_on = "*",
- shadow_colour = "#777777",
- highlight_colour = "#eeeeee",
- padding_colour = "#aaaaaa",
- background_colour = "#000000",
- foreground_colour = "#ffffff",
- padding_pixels = 2,
- highlight_pixels = 1,
- shadow_pixels = 1,
-})
-
de.defstyle("tab", {
- based_on = "*",
font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
de.substyle("active-selected", {
shadow_colour = "#333366",
})
de.defstyle("input", {
- based_on = "*",
- shadow_colour = "#777777",
- highlight_colour = "#eeeeee",
- background_colour = "#aaaaaa",
- foreground_colour = "#000000",
- padding_pixels = 1,
- highlight_pixels = 1,
- shadow_pixels = 1,
- border_style = "elevated",
de.substyle("*-cursor", {
background_colour = "#000000",
foreground_colour = "#aaaaaa",
}),
de.substyle("*-selection", {
- background_colour = "#aaaaaa",
+ background_colour = "#666699",
foreground_colour = "black",
}),
})
text_align = "center",
})
-de.defstyle("frame", {
- based_on = "*",
- shadow_colour = "#606060",
- highlight_colour = "#ffffff",
- padding_colour = "#d8d8d8",
- background_colour = "#000000",
- foreground_colour = "#000000",
- padding_pixels = 2,
- highlight_pixels = 1,
- shadow_pixels = 1,
- de.substyle("active", {
- shadow_colour = "#606060",
- highlight_colour = "#ffffff",
- background_colour = "#d8d8d8",
- foreground_colour = "#000000",
- }),
-})
-
de.defstyle("tab", {
- based_on = "*",
font = "-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*",
de.substyle("active-selected", {
shadow_colour = "#f09000",
})
de.defstyle("input", {
- based_on = "*",
- shadow_colour = "#606060",
- highlight_colour = "#ffffff",
- background_colour = "#d8d8d8",
- foreground_colour = "#000000",
- padding_pixels = 1,
- highlight_pixels = 1,
- shadow_pixels = 1,
- border_style = "elevated",
de.substyle("*-cursor", {
background_colour = "#000000",
foreground_colour = "#d8d8d8",
dopath("lookcommon_emboss")
+de.defstyle("frame-tiled", {
+ spacing = 0,
+})
+
+de.defstyle("frame-tiled-alt", {
+ spacing = 0,
+})
+
+de.defstyle("tab-frame-tiled", {
+ spacing = 0,
+})
+
gr.refresh()
de.defstyle("tab", {
- based_on = "*",
font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
de.substyle("active-selected", {
de.defstyle("input", {
- based_on = "*",
text_align = "left",
highlight_colour = "#eeeeff",
shadow_colour = "#eeeeff",
de.defstyle("input-menu", {
- based_on = "input",
highlight_pixels = 0,
shadow_pixels = 0,
padding_pixels = 0,
de.defstyle("frame", {
- based_on = "*",
- background_colour = "#000000",
- transparent_background = false,
shadow_pixels = 1,
highlight_pixels = 1,
padding_pixels = 0,
border_sides = "all",
- de.substyle("quasiactive", {
- -- Something detached from the frame is active
- padding_colour = "#901010",
- }),
})
-de.defstyle("frame-tiled", {
- based_on = "frame",
- shadow_pixels = 0,
- highlight_pixels = 0,
- padding_pixels = 1,
-})
-
-de.defstyle("frame-tiled-alt", {
- based_on = "frame-tiled",
+de.defstyle("frame-transient", {
bar = "none",
+ padding_pixels = 1,
})
-de.defstyle("frame-floating", {
- based_on = "frame",
- bar = "shaped",
- padding_pixels = 0,
-})
+dopath("lookcommon_clean")
-dopath("lookcommon_clean_stdisp")
-dopath("lookcommon_clean_tab")
-- Refresh objects' brushes.
gr.refresh()
})
de.defstyle("frame", {
- based_on = "*",
shadow_colour = "black",
highlight_colour = "black",
padding_colour = "black",
})
de.defstyle("tab", {
- based_on = "*",
font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*",
de.substyle("active-selected", {
shadow_colour = "black",
})
de.defstyle("input", {
- based_on = "*",
shadow_colour = "black",
highlight_colour = "black",
background_colour = "#3f3f3f",
})
de.defstyle("input-menu", {
- based_on = "input",
padding_pixels=0,
})
--- Settings common to the "clean" styles.
+-- Common settings for the "clean" styles
-dopath("lookcommon_clean_stdisp")
-dopath("lookcommon_clean_tab")
-dopath("lookcommon_clean_frame")
+de.defstyle("frame", {
+ background_colour = "#000000",
+ de.substyle("quasiactive", {
+ -- Something detached from the frame is active
+ padding_colour = "#901010",
+ }),
+ de.substyle("userattr1", {
+ -- For user scripts
+ padding_colour = "#009010",
+ }),
+})
+
+de.defstyle("frame-tiled", {
+ shadow_pixels = 0,
+ highlight_pixels = 0,
+ padding_pixels = 1,
+ spacing = 1,
+})
+
+de.defstyle("frame-tiled-alt", {
+ bar = "none",
+})
+
+de.defstyle("frame-floating", {
+ bar = "shaped",
+ padding_pixels = 0,
+})
+
+
+de.defstyle("actnotify", {
+ shadow_colour = "#c04040",
+ highlight_colour = "#c04040",
+ background_colour = "#901010",
+ foreground_colour = "#eeeeee",
+})
+
+de.defstyle("tab", {
+ de.substyle("*-*-*-unselected-activity", {
+ shadow_colour = "#c04040",
+ highlight_colour = "#c04040",
+ background_colour = "#901010",
+ foreground_colour = "#eeeeee",
+ }),
+
+ de.substyle("*-*-*-selected-activity", {
+ shadow_colour = "#c04040",
+ highlight_colour = "#c04040",
+ background_colour = "#b03030",
+ foreground_colour = "#ffffff",
+ }),
+
+ de.substyle("*-*-*-tabnumber", {
+ background_colour = "black",
+ foreground_colour = "green",
+ }),
+})
+
+de.defstyle("tab-frame", {
+ spacing = 1,
+})
+
+de.defstyle("tab-frame-floating", {
+ spacing = 0,
+})
+
+de.defstyle("tab-menuentry", {
+ text_align = "left",
+})
+
+de.defstyle("tab-menuentry-big", {
+ font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*",
+ padding_pixels = 7,
+})
+
+
+de.defstyle("stdisp", {
+ shadow_pixels = 0,
+ highlight_pixels = 0,
+ text_align = "left",
+ background_colour = "#000000",
+ foreground_colour = "grey",
+ font="-misc-fixed-medium-r-*-*-13-*-*-*-*-60-*-*",
+
+ de.substyle("important", {
+ foreground_colour = "green",
+ }),
+
+ de.substyle("critical", {
+ foreground_colour = "red",
+ }),
+})
+++ /dev/null
--- Common frame settings for the "clean" styles
-
-de.defstyle("frame", {
- based_on = "*",
- background_colour = "#000000",
- transparent_background = false,
- de.substyle("quasiactive", {
- -- Something detached from the frame is active
- padding_colour = "#901010",
- }),
-})
-
-de.defstyle("frame-tiled", {
- based_on = "frame",
- shadow_pixels = 0,
- highlight_pixels = 0,
- padding_pixels = 1,
- spacing = 1,
-})
-
-de.defstyle("frame-tiled-alt", {
- based_on = "frame-tiled",
- bar = "none",
-})
-
-de.defstyle("frame-floating", {
- based_on = "frame",
- bar = "shaped",
- padding_pixels = 0,
-})
+++ /dev/null
--- Common stdisp configuration for the "clean styles"
-
-de.defstyle("stdisp", {
- based_on = "*",
- shadow_pixels = 0,
- highlight_pixels = 0,
- text_align = "left",
- background_colour = "#000000",
- foreground_colour = "grey",
- font="-misc-fixed-medium-r-*-*-13-*-*-*-*-60-*-*",
-
- de.substyle("important", {
- foreground_colour = "green",
- }),
-
- de.substyle("critical", {
- foreground_colour = "red",
- }),
-})
+++ /dev/null
--- Common tab configuration (mostly activity stuff) for the "clean styles"
-
-de.defstyle("actnotify", {
- based_on = "*",
- shadow_colour = "#c04040",
- highlight_colour = "#c04040",
- background_colour = "#901010",
- foreground_colour = "#eeeeee",
-})
-
-de.defstyle("tab-frame", {
- based_on = "tab",
- -- TODO: some kind of amend option. It should not be necessary to
- -- duplicate this definition for both tab-frame and tab-menuentry,
- -- or for each style, nor use more complex hacks to communicate
- -- this stuff otherwise.
- de.substyle("*-*-*-unselected-activity", {
- shadow_colour = "#c04040",
- highlight_colour = "#c04040",
- background_colour = "#901010",
- foreground_colour = "#eeeeee",
- }),
-
- de.substyle("*-*-*-selected-activity", {
- shadow_colour = "#c04040",
- highlight_colour = "#c04040",
- background_colour = "#b03030",
- foreground_colour = "#ffffff",
- }),
-})
-
-de.defstyle("tab-frame-tiled", {
- based_on = "tab-frame",
- spacing = 1,
-})
-
-de.defstyle("tab-menuentry", {
- based_on = "tab",
- text_align = "left",
-
- de.substyle("*-*-*-unselected-activity", {
- shadow_colour = "#c04040",
- highlight_colour = "#c04040",
- background_colour = "#901010",
- foreground_colour = "#eeeeee",
- }),
-
- de.substyle("*-*-*-selected-activity", {
- shadow_colour = "#c04040",
- highlight_colour = "#c04040",
- background_colour = "#b03030",
- foreground_colour = "#ffffff",
- }),
-})
-
-de.defstyle("tab-menuentry-big", {
- based_on = "tab-menuentry",
- font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*",
- padding_pixels = 7,
-})
--- Settings common to "emboss" styles.
+-- Common settings for the "emboss" styles
-dopath("lookcommon_emboss_stdisp")
-dopath("lookcommon_emboss_tab")
-dopath("lookcommon_emboss_frame")
+de.defstyle("frame", {
+ background_colour = "#000000",
+ -- The special "inherit" value causes setting 'background_colour'
+ -- above not to set padding_colour, but this colour being inherited.
+ padding_colour = "inherit",
+ de.substyle("quasiactive", {
+ -- Something detached from the frame is active
+ padding_colour = "#901010",
+ }),
+ de.substyle("userattr1", {
+ -- For user scripts
+ padding_colour = "#009010",
+ }),
+ border_style = "ridge",
+ padding_pixels = 2,
+ highlight_pixels = 1,
+ shadow_pixels = 1,
+ spacing = 1,
+})
+
+de.defstyle("frame-tiled", {
+ border_style = "inlaid",
+ padding_pixels = 1,
+})
+
+de.defstyle("frame-tiled-alt", {
+ bar = "none",
+})
+
+de.defstyle("frame-floating", {
+ bar = "shaped",
+ spacing = 0,
+})
+
+de.defstyle("frame-transient", {
+ bar = "none",
+ spacing = 0,
+})
+
+de.defstyle("actnotify", {
+ shadow_colour = "#600808",
+ highlight_colour = "#c04040",
+ background_colour = "#b03030",
+ foreground_colour = "#ffffff",
+})
+
+de.defstyle("tab", {
+ de.substyle("*-*-*-unselected-activity", {
+ shadow_colour = "#600808",
+ highlight_colour = "#c04040",
+ background_colour = "#901010",
+ foreground_colour = "#eeeeee",
+ }),
+
+ de.substyle("*-*-*-selected-activity", {
+ shadow_colour = "#600808",
+ highlight_colour = "#c04040",
+ background_colour = "#b03030",
+ foreground_colour = "#ffffff",
+ }),
+
+ de.substyle("*-*-*-tabnumber", {
+ background_colour = "black",
+ foreground_colour = "green",
+ }),
+})
+
+
+de.defstyle("tab-frame", {
+ spacing = 1,
+})
+
+de.defstyle("tab-frame-floating", {
+ spacing = 0,
+})
+
+de.defstyle("tab-frame-transient", {
+ spacing = 0,
+})
+
+de.defstyle("tab-menuentry", {
+ text_align = "left",
+ highlight_pixels = 0,
+ shadow_pixels = 0,
+})
+
+de.defstyle("tab-menuentry-big", {
+ font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*",
+ padding_pixels = 7,
+})
+
+
+de.defstyle("stdisp", {
+ shadow_pixels = 0,
+ highlight_pixels = 0,
+ text_align = "left",
+
+ de.substyle("important", {
+ foreground_colour = "green",
+ }),
+
+ de.substyle("critical", {
+ foreground_colour = "red",
+ }),
+})
+++ /dev/null
-de.defstyle("frame-tiled", {
- based_on = "frame",
- border_style = "inlaid",
- padding_pixels = 1,
- spacing = 1,
-})
-
-de.defstyle("frame-floating", {
- based_on = "frame",
- border_style = "ridge",
- bar = "shaped"
-})
-
-de.defstyle("frame-tiled-alt", {
- based_on = "frame-tiled",
- bar = "none",
-})
+++ /dev/null
--- Common stdisp settings for the "emboss" styles
-
-de.defstyle("stdisp", {
- based_on = "*",
- shadow_pixels = 0,
- highlight_pixels = 0,
- text_align = "left",
-
- de.substyle("important", {
- foreground_colour = "green",
- }),
-
- de.substyle("critical", {
- foreground_colour = "red",
- }),
-})
+++ /dev/null
--- Common tab settings for the "emboss" styles
-
-de.defstyle("actnotify", {
- based_on = "*",
- shadow_colour = "#600808",
- highlight_colour = "#c04040",
- background_colour = "#b03030",
- foreground_colour = "#ffffff",
-})
-
-de.defstyle("tab-frame", {
- based_on = "tab",
- -- TODO: some kind of amend option. It should not be necessary to
- -- duplicate this definition for both tab-frame and tab-menuentry,
- -- or for each style, nor use more complex hacks to communicate
- -- this stuff otherwise.
- de.substyle("*-*-*-unselected-activity", {
- shadow_colour = "#600808",
- highlight_colour = "#c04040",
- background_colour = "#901010",
- foreground_colour = "#eeeeee",
- }),
-
- de.substyle("*-*-*-selected-activity", {
- shadow_colour = "#600808",
- highlight_colour = "#c04040",
- background_colour = "#b03030",
- foreground_colour = "#ffffff",
- }),
-})
-
-de.defstyle("tab-frame-tiled", {
- based_on = "tab-frame",
- spacing = 1,
-})
-
-de.defstyle("tab-menuentry", {
- based_on = "tab",
- text_align = "left",
- highlight_pixels = 0,
- shadow_pixels = 0,
-
- de.substyle("*-*-*-unselected-activity", {
- shadow_colour = "#600808",
- highlight_colour = "#c04040",
- background_colour = "#901010",
- foreground_colour = "#eeeeee",
- }),
-
- de.substyle("*-*-*-selected-activity", {
- shadow_colour = "#600808",
- highlight_colour = "#c04040",
- background_colour = "#b03030",
- foreground_colour = "#ffffff",
- }),
-})
-
-de.defstyle("tab-menuentry-big", {
- based_on = "tab-menuentry",
- font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*",
- padding_pixels = 7,
-})
Context:
-[TAG ion-3ds-20070318
-Tuomo Valkonen <tuomov@iki.fi>**20070318203122]
+[TAG ion-3rc-20070506
+Tuomo Valkonen <tuomov@iki.fi>**20070506144318]
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <stdlib.h>
LUA_SOURCES=\
ioncore_ext.lua ioncore_luaext.lua ioncore_bindings.lua \
ioncore_winprops.lua ioncore_misc.lua ioncore_efbb.lua \
- ioncore_wd.lua ioncore_menudb.lua
+ ioncore_wd.lua ioncore_menudb.lua ioncore_tabnum.lua
ifeq ($(PRELOAD_MODULES),1)
CFLAGS += -DCF_PRELOAD_MODULES
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/setparam.h>
/*EXTL_DOC
- * Set activity flag of \var{reg}. The \var{how} parameter most be
- * one of (set/unset/toggle).
+ * Set activity flag of \var{reg}. The \var{how} parameter must be
+ * one of \codestr{set}, \codestr{unset} or \codestr{toggle}.
*/
EXTL_EXPORT_AS(WRegion, set_activity)
bool region_set_activity_extl(WRegion *reg, const char *how)
/*EXTL_DOC
- * Return first regio non activity list.
+ * Returns first region on activity list.
*/
EXTL_SAFE
EXTL_EXPORT
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_ACTIVITY_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_ATTACH_H
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objp.h>
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_BASICPHOLDER_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
binding=search_binding(bindmap, &tmp);
+ if(BINDING_IS_PSEUDO(act)){
+ /* No use trying anything else */
+ return binding;
+ }
+
if(binding==NULL){
tmp.state=AnyModifier;
binding=search_binding(bindmap, &tmp);
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_BINDING_H
#include <libextl/extl.h>
-#define BINDING_KEYPRESS 0
-#define BINDING_BUTTONPRESS 1
-#define BINDING_BUTTONMOTION 2
-#define BINDING_BUTTONCLICK 3
-#define BINDING_BUTTONDBLCLICK 4
+enum{
+ BINDING_KEYPRESS,
+ BINDING_BUTTONPRESS,
+ BINDING_BUTTONMOTION,
+ BINDING_BUTTONCLICK,
+ BINDING_BUTTONDBLCLICK,
+ BINDING_SUBMAP_ENTER,
+ BINDING_SUBMAP_RELEASEMOD
+ /*BINDING_SUBMAP_LEAVE*/
+};
+#define BINDING_IS_PSEUDO(A) \
+ ((A)==BINDING_SUBMAP_ENTER || (A)==BINDING_SUBMAP_RELEASEMOD)
+
#define BINDMAP_INIT {0, NULL, NULL, NULL, NULL}
#define FOR_ALL_BINDINGS(B, NODE, MAP) \
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/rb.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/map.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_CLASSES_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
set_sane_gravity(cwin->win);
- cwin->transient_for=None;
-
cwin->n_cmapwins=0;
cwin->cmap=attr->colormap;
cwin->cmaps=NULL;
xwindow_unmanaged_selectinput(win, 0);
- win=hints->icon_window;
+ /* Copy WM_CLASS as _ION_DOCKAPP_HACK */
+ {
+ char **p=NULL;
+ int n=0;
+
+ p=xwindow_get_text_property(win, XA_WM_CLASS, &n);
+
+ if(p!=NULL){
+ xwindow_set_text_property(hints->icon_window,
+ ioncore_g.atom_dockapp_hack,
+ (const char **)p, n);
+ XFreeStringList(p);
+ }else{
+ const char *pdummy[2]={"unknowndockapp", "UnknownDockapp"};
+ xwindow_set_text_property(hints->icon_window,
+ ioncore_g.atom_dockapp_hack,
+ pdummy, 2);
+ }
+ }
/* It is a dockapp, do everything again from the beginning, now
* with the icon window.
*/
+ win=hints->icon_window;
param.dockapp=TRUE;
goto again;
}
/*EXTL_DOC
- * Attempt to kill (with XKillWindow) the client that owns the X
- * window correspoding to \var{cwin}.
+ * Attempt to kill (with \code{XKillWindow}) the client that owns
+ * the X window correspoding to \var{cwin}.
*/
EXTL_EXPORT_MEMBER
void clientwin_kill(WClientWin *cwin)
EXTL_EXPORT_MEMBER
ExtlTab clientwin_get_ident(WClientWin *cwin)
{
- char **p=NULL, *wrole=NULL;
+ char **p=NULL, **p2=NULL, *wrole=NULL;
int n=0, n2=0, n3=0, tmp=0;
+ Window tforwin=None;
ExtlTab tab;
+ bool dockapp_hack=FALSE;
p=xwindow_get_text_property(cwin->win, XA_WM_CLASS, &n);
- wrole=xwindow_get_string_property(cwin->win, ioncore_g.atom_wm_window_role, &n2);
+
+ p2=xwindow_get_text_property(cwin->win, ioncore_g.atom_dockapp_hack, &n2);
+
+ dockapp_hack=(n2>0);
+
+ if(p==NULL){
+ /* Some dockapps do actually have WM_CLASS, so use it. */
+ p=p2;
+ n=n2;
+ p2=NULL;
+ }
+
+ wrole=xwindow_get_string_property(cwin->win, ioncore_g.atom_wm_window_role,
+ &n3);
tab=extl_create_table();
if(n>=2 && p[1]!=NULL)
if(wrole!=NULL)
extl_table_sets_s(tab, "role", wrole);
+ if(XGetTransientForHint(ioncore_g.dpy, cwin->win, &tforwin)
+ && tforwin!=None){
+ extl_table_sets_b(tab, "is_transient", TRUE);
+ }
+
+ if(dockapp_hack)
+ extl_table_sets_b(tab, "is_dockapp", TRUE);
+
if(p!=NULL)
XFreeStringList(p);
+ if(p2!=NULL)
+ XFreeStringList(p2);
if(wrole!=NULL)
free(wrole);
if(!region_fullscreen_scr(grp, scr, sw))
cwin->flags&=~CLIENTWIN_FS_RQ;
+
+ return TRUE;
}
-
- return TRUE;
}
return FALSE;
WClientWin *cwin=NULL;
XWindowAttributes attr;
WRectangle rg;
- bool got_chkc;
-
+ bool got_chkc=FALSE;
+
if(!extl_table_gets_d(tab, "windowid", &wind) ||
!extl_table_gets_i(tab, "checkcode", &chkc)){
return NULL;
warn(TR("Saved client window does not want to be managed."));
return NULL;
}
-
- /*
- attr.x=fp->g.x;
- attr.y=fp->g.y;
- attr.width=fp->g.w;
- attr.height=fp->g.h;
- */
-
+
cwin=create_clientwin(par, win, &attr);
if(cwin==NULL)
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_CLIENTWIN_H
int orig_bw;
- Window transient_for;
-
Colormap cmap;
Colormap *cmaps;
Window *cmapwins;
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/rb.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_COLORMAP_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_COMMON_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
ExtlTab subtab, uint action, uint mod, uint ksb)
{
WBinding binding, *bnd;
- uint kcb;
+ uint kcb=0;
if(action!=BINDING_KEYPRESS)
return FALSE;
kcb=XKeysymToKeycode(ioncore_g.dpy, ksb);
+
bnd=bindmap_lookup_binding(bindmap, action, mod, kcb);
if(bnd!=NULL && bnd->submap!=NULL && bnd->state==mod)
{"mclick", BINDING_BUTTONCLICK},
{"mdblclick", BINDING_BUTTONDBLCLICK},
{"mdrag", BINDING_BUTTONMOTION},
+ {"submap_enter", BINDING_SUBMAP_ENTER},
+ {"submap_wait", BINDING_SUBMAP_RELEASEMOD},
+ /*{"submap_leave", BINDING_SUBMAP_LEAVE},*/
{NULL, 0}
};
goto fail;
}
}
+
+ if(!BINDING_IS_PSEUDO(action)){
+ if(!extl_table_gets_s(tab, "kcb", &ksb_str))
+ goto fail;
- if(!extl_table_gets_s(tab, "kcb", &ksb_str))
- goto fail;
-
- if(!ioncore_parse_keybut(ksb_str, &mod, &ksb,
- (action!=BINDING_KEYPRESS && action!=-1),
- init_any)){
- goto fail;
+ if(!ioncore_parse_keybut(ksb_str, &mod, &ksb,
+ (action!=BINDING_KEYPRESS && action!=-1),
+ init_any)){
+ goto fail;
+ }
}
if(extl_table_gets_t(tab, "submap", &subtab)){
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_CONF_BINDINGS_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <stdlib.h>
* for hidden workspaces with activity? \\
* \var{frame_default_index} & (string) Specifies where to add new regions
* on the mutually exclusive list of a frame. One of
- * ''last'', ''next'' (for after current), ''next-act''
+ * \codestr{last}, \codestr{next}, (for after current),
+ * or \codestr{next-act}
* (for after current and anything with activity right
* after it). \\
* \var{dblclick_delay} & (integer) Delay between clicks of a double click.\\
* \var{kbresize_maxacc} & (floating point) See below. \\
* \var{framed_transients} & (boolean) Put transients in nested frames. \\
* \var{float_placement_method} & (string) How to place floating frames.
- * One of ''udlr'' (up-down, then left-right),
- * ''lrud'' (left-right, then up-down) or ''random''. \\
- * \var{mousefocus} & String: ''disable'' or ''sloppy''. \\
+ * One of \codestr{udlr} (up-down, then left-right),
+ * \codestr{lrud} (left-right, then up-down), or
+ * \codestr{random}. \\
+ * \var{mousefocus} & (string) Mouse focus mode:
+ * \codestr{disable} or \codestr{sloppy}. \\
* \var{unsqueeze} & (boolean) Auto-unsqueeze transients/menus/queries/etc. \\
* \var{autoraise} & (boolean) Autoraise regions in groups on goto. \\
* \end{tabularx}
/*EXTL_DOC
- * Get important directories (userdir, sessiondir, searchpath).
+ * Get important directories (the fields \var{userdir},
+ * \var{sessiondir}, \var{searchpath} in the returned table).
*/
EXTL_SAFE
EXTL_EXPORT
/*EXTL_DOC
- * Set important directories (sessiondir, searchpath).
+ * Set important directories (the fields \var{sessiondir}, \var{searchpath}
+ * of \var{tab}).
*/
EXTL_EXPORT
bool ioncore_set_paths(ExtlTab tab)
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_CONF_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include "common.h"
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_CURSOR_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objp.h>
}
-bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode)
+static bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode,
+ uint framelevel)
{
WGroupAttachParams ap=GROUPATTACHPARAMS_INIT;
WRegionAttachData data;
ap.geom_weak_set=TRUE;
ap.geom_weak=0;
+
+ ap.level_set=TRUE;
+ ap.level=framelevel+1;
get_relative_geom(&fpa.inner_geom, reg, (WRegion*)grp);
ap.szplcy=st->szplcy;
ap.szplcy_set=TRUE;
- ap.level=maxof(st->level, STACKING_LEVEL_NORMAL);
ap.level_set=TRUE;
+ ap.level=maxof(st->level, STACKING_LEVEL_NORMAL);
}
ap.geom_set=TRUE;
}
-static WGroup *find_group(WRegion *reg)
+static WGroup *find_group(WRegion *reg, uint *level)
{
WRegion *mgr=REGION_MANAGER(reg);
while(mgr!=NULL){
+ reg=mgr;
mgr=REGION_MANAGER(mgr);
- if(OBJ_IS(mgr, WGroup))
+ if(OBJ_IS(mgr, WGroup)){
+ WStacking *st=ioncore_find_stacking((WRegion*)reg);
+ if(st!=NULL)
+ *level=st->level;
break;
+ }
}
return (WGroup*)mgr;
WFrameMode mode;
WGroup *grp;
bool set, nset;
+ uint level=STACKING_LEVEL_NORMAL;
reg=region_groupleader_of(reg);
- grp=find_group(check_mplex(reg, &mode));
+ grp=find_group(check_mplex(reg, &mode), &level);
/* reg is only considered detached if there's no higher-level group
* to attach to, thus causing 'toggle' to cycle.
return set;
if(!set){
- return ioncore_do_detach(reg, grp, mode);
+ return ioncore_do_detach(reg, grp, mode, level);
}else{
WPHolder *ph=region_get_return(reg);
/*EXTL_DOC
* Detach or reattach \var{reg}, depending on whether \var{how}
- * is 'set'/'unset'/'toggle'. (Detaching means making \var{reg}
- * managed by its nearest ancestor \type{WGroup}, framed if \var{reg} is
- * not itself \type{WFrame}. Reattaching means making it managed where
- * it used to be managed, if a return-placeholder exists.)
- * If \var{reg} is the 'bottom' of some group, the whole group is
+ * is \codestr{set}, \codestr{unset} or \codestr{toggle}. (Detaching
+ * means making \var{reg} managed by its nearest ancestor \type{WGroup},
+ * framed if \var{reg} is not itself \type{WFrame}. Reattaching means
+ * making it managed where it used to be managed, if a return-placeholder
+ * exists.)
+ * If \var{reg} is the `bottom' of some group, the whole group is
* detached. If \var{reg} is a \type{WWindow}, it is put into a
* frame.
*/
void do_unsqueeze(WRegion *reg)
{
- WSizeHints hints;
+ WSizeHints h;
+ WRegion *mgr=REGION_MANAGER(reg);
- if(REGION_MANAGER_CHK(reg, WScreen)!=NULL)
+ if(OBJ_IS(reg, WScreen))
return;
- region_size_hints(reg, &hints);
+ region_size_hints(reg, &h);
- if(!hints.min_set)
+ if(!h.min_set)
return;
- if(hints.min_width<=REGION_GEOM(reg).w &&
- hints.min_height<=REGION_GEOM(reg).h){
+ if(h.min_width<=REGION_GEOM(reg).w &&
+ h.min_height<=REGION_GEOM(reg).h){
return;
}
- if(!ioncore_detach(reg, SETPARAM_SET))
- return;
+ ioncore_detach(reg, SETPARAM_SET);
+ if(REGION_MANAGER(reg)==mgr)
+ return;
+
do_unsqueeze(reg);
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_DETACH_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
/* This file contains dummy implementations of multibyte/widechar routines
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <X11/Xmd.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_EVENT_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <stdlib.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_EVENTH_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <limits.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_EXEC_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_EXTLCONV_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_FLOAT_PLACEMENT_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libmainloop/hooks.h>
}
-static bool region_is_await(WRegion *reg)
+static bool region_is_parent(WRegion *reg, WRegion *aw)
{
- WRegion *aw=(WRegion*)await_watch.obj;
-
while(aw!=NULL){
if(aw==reg)
return TRUE;
}
+static bool region_is_await(WRegion *reg)
+{
+ return region_is_parent(reg, (WRegion*)await_watch.obj);
+}
+
+
+static bool region_is_focusnext(WRegion *reg)
+{
+ return region_is_parent(reg, ioncore_g.focus_next);
+}
+
+
/* Only keep await status if focus event is to an ancestor of the await
* region.
*/
}
+static bool region_manager_is_focusnext(WRegion *reg)
+{
+ if(reg==NULL || ioncore_g.focus_next==NULL)
+ return FALSE;
+
+ if(reg==ioncore_g.focus_next)
+ return TRUE;
+
+ return region_manager_is_focusnext(REGION_MANAGER(reg));
+}
+
+
bool region_may_control_focus(WRegion *reg)
{
if(OBJ_IS_BEING_DESTROYED(reg))
if(REGION_IS_ACTIVE(reg) || REGION_IS_PSEUDOACTIVE(reg))
return TRUE;
-
- if(region_is_await(reg))
+
+ if(region_is_await(reg) || region_is_focusnext(reg))
+ return TRUE;
+
+ if(region_manager_is_focusnext(reg))
return TRUE;
return FALSE;
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_FOCUS_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
FRAME_MX_FOR_ALL(sub, frame, tmp){
textw=init_title(frame, i);
if(textw>0){
- if(frame->flags&FRAME_SHOW_NUMBERS){
- char *s=NULL;
- libtu_asprintf(&s, "[%d]", i+1);
- if(s!=NULL){
- title=grbrush_make_label(frame->bar_brush, s, textw);
- free(s);
- }else{
- title=NULL;
- }
- }else{
- title=region_make_label(sub, textw, frame->bar_brush);
- }
+ title=region_make_label(sub, textw, frame->bar_brush);
frame->titles[i].text=title;
}
i++;
}
-static void set_common_attrs(const WFrame *frame, GrBrush *brush)
-{
- ensure_create_attrs();
-
- grbrush_set_attr(brush, REGION_IS_ACTIVE(frame)
- ? GR_ATTR(active)
- : GR_ATTR(inactive));
- grbrush_set_attr(brush, frame->quasiactive_count>0
- ? GR_ATTR(quasiactive)
- : GR_ATTR(not_quasiactive));
-}
-
-
void frame_draw_bar(const WFrame *frame, bool complete)
{
WRectangle geom;
grbrush_begin(frame->bar_brush, &geom, GRBRUSH_AMEND);
- set_common_attrs(frame, frame->bar_brush);
+ grbrush_init_attr(frame->bar_brush, &frame->baseattr);
grbrush_draw_textboxes(frame->bar_brush, &geom, frame->titles_n,
frame->titles, complete);
grbrush_begin(frame->brush, &geom, (complete ? 0 : GRBRUSH_NO_CLEAR_OK));
- set_common_attrs(frame, frame->brush);
+ grbrush_init_attr(frame->brush, &frame->baseattr);
grbrush_draw_border(frame->brush, &geom);
void frame_setup_dragwin_style(WFrame *frame, GrStyleSpec *spec, int tab)
{
+ gr_stylespec_append(spec, &frame->baseattr);
gr_stylespec_append(spec, &frame->titles[tab].attr);
+}
+
+
+/*}}}*/
+
+
+/*{{{ Activated/inactivated */
+
+
+void frame_inactivated(WFrame *frame)
+{
+ ensure_create_attrs();
+
+ gr_stylespec_set(&frame->baseattr, GR_ATTR(inactive));
+ gr_stylespec_unset(&frame->baseattr, GR_ATTR(active));
+
+ window_draw((WWindow*)frame, FALSE);
+}
+
+
+void frame_activated(WFrame *frame)
+{
+ ensure_create_attrs();
+
+ gr_stylespec_set(&frame->baseattr, GR_ATTR(active));
+ gr_stylespec_unset(&frame->baseattr, GR_ATTR(inactive));
+
+ window_draw((WWindow*)frame, FALSE);
+}
+
+
+void frame_quasiactivity_change(WFrame *frame)
+{
+ bool is=(frame->quasiact_source!=NULL);
- gr_stylespec_set(spec, REGION_IS_ACTIVE(frame)
- ? GR_ATTR(active)
- : GR_ATTR(inactive));
- gr_stylespec_set(spec, frame->quasiactive_count>0
- ? GR_ATTR(quasiactive)
- : GR_ATTR(not_quasiactive));
+ ensure_create_attrs();
+
+ if(is){
+ gr_stylespec_set(&frame->baseattr, GR_ATTR(quasiactive));
+ gr_stylespec_unset(&frame->baseattr, GR_ATTR(not_quasiactive));
+ }else{
+ gr_stylespec_set(&frame->baseattr, GR_ATTR(not_quasiactive));
+ gr_stylespec_unset(&frame->baseattr, GR_ATTR(quasiactive));
+ }
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_FRAME_DRAW_H
extern void frame_setup_dragwin_style(WFrame *frame, GrStyleSpec *spec, int tab);
+extern void frame_inactivated(WFrame *frame);
+extern void frame_activated(WFrame *frame);
+extern void frame_quasiactivity_change(WFrame *frame);
+
#endif /* ION_IONCORE_FRAME_DRAW_H */
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
/*EXTL_DOC
* Start dragging the tab that the user pressed on with the pointing device.
* This function should only be used by binding it to \emph{mpress} or
- * \emph{mdrag} action with area ''tab''.
+ * \emph{mdrag} action with area \codestr{tab}.
*/
EXTL_EXPORT_MEMBER
void frame_p_tabdrag(WFrame *frame)
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_FRAME_POINTER_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
frame->mode=mode;
frame->tab_min_w=0;
frame->bar_max_width_q=1.0;
+ frame->quasiact_source=NULL;
+
+ gr_stylespec_init(&frame->baseattr);
if(!mplex_init((WMPlex*)frame, parent, fp))
return FALSE;
{
frame_free_titles(frame);
frame_release_brushes(frame);
+ gr_stylespec_unalloc(&frame->baseattr);
mplex_deinit((WMPlex*)frame);
}
/*{{{ Focus */
-void frame_inactivated(WFrame *frame)
-{
- window_draw((WWindow*)frame, FALSE);
-}
-
-
-void frame_activated(WFrame *frame)
+static void frame_quasiactivation(WFrame *frame, Obj *src, bool act)
{
- window_draw((WWindow*)frame, FALSE);
-}
-
-
-void frame_quasiactivation(WFrame *frame, WRegion *reg, bool act)
-{
- bool was, is;
-
- was=(frame->quasiactive_count>0);
+ if(frame->quasiact_source==src || act){
+ bool was, is;
+
+ was=(frame->quasiact_source!=NULL);
- frame->quasiactive_count=maxof(0, frame->quasiactive_count
- + (act ? 1 : -1));
-
- is=(frame->quasiactive_count>0);
+ frame->quasiact_source=(act ? src : NULL);
- if(was!=is && !REGION_IS_ACTIVE(frame))
- window_draw((WWindow*)frame, FALSE);
+ is=(frame->quasiact_source!=NULL);
+
+ if(was!=is){
+ frame_quasiactivity_change(frame);
+ if(!REGION_IS_ACTIVE(frame))
+ window_draw((WWindow*)frame, FALSE);
+ }
+ }
}
static bool actinact(WRegion *reg, bool act)
{
WPHolder *returnph=region_get_return(reg);
- WFrame *frame;
+ WFrame *frame=NULL;
+ Obj *src=NULL;
+ WRegion *tgt;
if(returnph==NULL || pholder_stale(returnph))
return FALSE;
- frame=OBJ_CAST(pholder_target(returnph), WFrame);
+ tgt=pholder_target(returnph);
+
+ frame=OBJ_CAST(tgt, WFrame);
if(frame!=NULL){
- /* Ok, reg has return placeholder set to a frame:
- * do quasiactivation/inactivation
+ src=(Obj*)returnph;
+ }else{
+ /* Show quasiactivation for stuff detached from
+ * groups contained in the frame as well.
*/
- frame_quasiactivation(frame, reg, act);
+ WGroup *grp=OBJ_CAST(tgt, WGroup);
+ if(grp!=NULL){
+ frame=REGION_MANAGER_CHK(grp, WFrame);
+ src=(Obj*)grp;
+ }
}
+ if(frame!=NULL)
+ frame_quasiactivation(frame, src, act);
+
return TRUE;
}
ph=region_make_return_pholder((WRegion*)frame);
- if(ph==NULL)
+ if(ph==NULL){
return NULL;
-
+ }
+
fparam.mode=frame->mode;
fph=create_framedpholder(ph, &fparam);
}
+bool frame_rescue_clientwins(WFrame *frame, WRescueInfo *info)
+{
+ frame_modify_pholders(frame);
+ return mplex_rescue_clientwins(&frame->mplex, info);
+}
+
+
/*}}}*/
/*EXTL_DOC
* Set shading state according to the parameter \var{how}
- * (set/unset/toggle). Resulting state is returned, which may not be
+ * (\codestr{set}, \codestr{unset}, or \codestr{toggle}).
+ * Resulting state is returned, which may not be
* what was requested.
*/
EXTL_EXPORT_AS(WFrame, set_shaded)
}
-bool frame_set_numbers(WFrame *frame, int sp)
+/* EXTL_DOC
+ * Is the attribute \var{attr} set?
+ */
+bool frame_is_grattr(WFrame *frame, const char *attr)
{
- bool set=frame->flags&FRAME_SHOW_NUMBERS;
- bool nset=libtu_do_setparam(sp, set);
-
- if(XOR(nset, set)){
- frame->flags^=FRAME_SHOW_NUMBERS;
- frame_recalc_bar(frame);
- frame_draw_bar(frame, TRUE);
- }
-
- return frame->flags&FRAME_SHOW_NUMBERS;
+ GrAttr a=stringstore_alloc(attr);
+ bool set=gr_stylespec_isset(&frame->baseattr, a);
+ stringstore_free(a);
+ return set;
}
-/*EXTL_DOC
- * Control whether tabs show numbers (set/unset/toggle).
- * Resulting state is returned, which may not be what was
- * requested.
- */
-EXTL_EXPORT_AS(WFrame, set_numbers)
-bool frame_set_numbers_extl(WFrame *frame, const char *how)
+bool frame_set_grattr(WFrame *frame, GrAttr a, int sp)
{
- return frame_set_numbers(frame, libtu_string_to_setparam(how));
+ bool set=gr_stylespec_isset(&frame->baseattr, a);
+ bool nset=libtu_do_setparam(sp, set);
+
+ if(XOR(set, nset)){
+ if(nset)
+ gr_stylespec_set(&frame->baseattr, a);
+ else
+ gr_stylespec_unset(&frame->baseattr, a);
+ window_draw((WWindow*)frame, TRUE);
+ }
+
+ return nset;
}
/*EXTL_DOC
- * Does \var{frame} show numbers for tabs?
+ * Set extra drawing engine attributes for the frame.
+ * The parameter \var{attr} is the attribute, and \var{how} is
+ * one of \codestr{set}, \codestr{unset}, or \codestr{toggle}.
*/
-bool frame_is_numbers(WFrame *frame)
+EXTL_EXPORT_AS(WFrame, set_grattr)
+bool frame_set_grattr_extl(WFrame *frame, const char *attr, const char *how)
{
- return frame->flags&FRAME_SHOW_NUMBERS;
+ if(attr!=NULL){
+ GrAttr a=stringstore_alloc(attr);
+ bool ret=frame_set_grattr(frame, a, libtu_string_to_setparam(how));
+ stringstore_free(a);
+ return ret;
+ }else{
+ return FALSE;
+ }
}
{
bool need_draw=TRUE;
+ if(mode==MPLEX_CHANGE_REMOVE && (Obj*)reg==frame->quasiact_source){
+ /* Reset indirect quasiactivation through group that
+ * is being removed.
+ */
+ frame->quasiact_source=NULL;
+ frame_quasiactivity_change(frame);
+ }
+
if(mode!=MPLEX_CHANGE_SWITCHONLY)
frame_initialise_titles(frame);
else
/*}}}*/
+/*{{{ prepare_manage_transient */
+
+
+WPHolder *frame_prepare_manage_transient(WFrame *frame,
+ const WClientWin *transient,
+ const WManageParams *param,
+ int unused)
+{
+ /* Transient manager searches should not cross tiled frames
+ * unless explicitly floated.
+ */
+ if(IS_FLOATING_MODE(frame) ||
+ extl_table_is_bool_set(transient->proptab, "float")){
+ return region_prepare_manage_transient_default((WRegion*)frame,
+ transient,
+ param,
+ unused);
+ }else{
+ return NULL;
+ }
+}
+
+
+/*}}}*/
+
+
/*{{{ Save/load */
{(DynFun*)mplex_default_index,
(DynFun*)frame_default_index},
+
+ {(DynFun*)region_prepare_manage_transient,
+ (DynFun*)frame_prepare_manage_transient},
+
+ {(DynFun*)region_rescue_clientwins,
+ (DynFun*)frame_rescue_clientwins},
END_DYNFUNTAB
};
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_FRAME_H
/*#define FRAME_SZH_USEMINMAX 0x1000 */
/*#define FRAME_FWD_CWIN_RQGEOM 0x2000 */
-#define FRAME_SHOW_NUMBERS 0x4000
typedef enum{
FRAME_MODE_UNKNOWN,
int saved_x, saved_y;
int tab_dragged_idx;
- uint quasiactive_count;
+ void *quasiact_source;
GrBrush *brush;
GrBrush *bar_brush;
+ GrStyleSpec baseattr;
GrTransparency tr_mode;
GrTextElem *titles;
int titles_n;
extern void ioncore_frame_quasiactivation_notify(WRegion *reg, WRegionNotify how);
+extern WPHolder *frame_prepare_manage_transient(WFrame *frame,
+ const WClientWin *transient,
+ const WManageParams *param,
+ int unused);
+
+extern bool frame_rescue_clientwins(WFrame *frame, WRescueInfo *info);
+
/* Save/load */
extern ExtlTab frame_get_configuration(WFrame *frame);
extern WRegion *frame_load(WWindow *par, const WFitParams *fp, ExtlTab tab);
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objp.h>
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_FRAMEDPHOLDER_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_FRAMEP_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/setparam.h>
/*EXTL_DOC
* Set client window \var{reg} full screen state according to the
- * parameter \var{how} (set/unset/toggle). Resulting state is returned,
- * which may not be what was requested.
+ * parameter \var{how} (one of \codestr{set}, \codestr{unset}, or
+ * \codestr{toggle}). Resulting state is returned, which may not be
+ * what was requested.
*/
EXTL_EXPORT_AS(WGroup, set_fullscreen)
bool group_set_fullscreen_extl(WGroup *grp, const char *how)
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_FULLSCREEN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_GLOBAL_H
Atom atom_checkcode;
Atom atom_selection;
Atom atom_mwm_hints;
-
+ Atom atom_dockapp_hack;
+
WRootWin *rootwins;
WScreen *screens;
WRegion *focus_next;
*
* Copyright (c) Tuomo Valkonen 2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_GR_UTIL_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
/*EXTL_DOC
- * Future requests for ''brushes'' are to be forwarded to the drawing engine
+ * Future requests for ``brushes'' are to be forwarded to the drawing engine
* \var{engine}. If no engine of such name is known, a module with that name
* is attempted to be loaded. This function is only intended to be called from
* colour scheme etc. configuration files and can not be used to change the
}
-static bool gr_stylespec_find_(GrStyleSpec *spec, GrAttr a, int *idx_ge)
+static bool gr_stylespec_find_(const GrStyleSpec *spec, GrAttr a, int *idx_ge)
{
bool found=FALSE;
uint i;
return found;
}
+
+bool gr_stylespec_isset(const GrStyleSpec *spec, GrAttr a)
+{
+ int idx_ge;
+
+ return gr_stylespec_find_(spec, a, &idx_ge);
+}
+
+
bool gr_stylespec_add(GrStyleSpec *spec, GrAttr a, uint score)
{
static const uint sz=sizeof(GrAttrScore);
/*EXTL_DOC
- * Read drawing engine configuration file \file{draw.lua}.
+ * Read drawing engine configuration file \file{look.lua}.
*/
EXTL_EXPORT_AS(gr, read_config)
void gr_read_config()
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_GR_H
extern void gr_stylespec_init(GrStyleSpec *spec);
extern bool gr_stylespec_set(GrStyleSpec *spec, GrAttr a);
+extern bool gr_stylespec_isset(const GrStyleSpec *spec, GrAttr a);
extern void gr_stylespec_unset(GrStyleSpec *spec, GrAttr a);
extern bool gr_stylespec_add(GrStyleSpec *spec, GrAttr a, uint score);
extern bool gr_stylespec_append(GrStyleSpec *dst, const GrStyleSpec *src);
* Copyright (c) Lukas Schroeder 2002,
* Tuomo Valkonen 2003-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
+ *
+ * Alternatively, you may apply the Clarified Artistic License to this file,
+ * since Lukas' contributions were originally under that.
*/
#include <stdlib.h>
current_grab->cursor=IONCORE_CURSOR_DEFAULT;
current_grab->confine_to=None; /*region_root_of(reg);*/
current_grab->sqid=last_sqid++;
+ watch_init(¤t_grab->watch);
do_grab_install(current_grab);
}
}
* Copyright (c) Lukas Schroeder 2002,
* Tuomo Valkonen 2003-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
+ *
+ * Alternatively, you may apply the Clarified Artistic License to this file,
+ * since Lukas' contributions were originally under that.
*/
#ifndef ION_IONCORE_GRAB_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
WPHolder *groupcw_prepare_manage(WGroupCW *cwg, const WClientWin *cwin,
- const WManageParams *param, int redir)
+ const WManageParams *param, int priority)
{
- if(redir==MANAGE_REDIR_STRICT_YES)
+ if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_GROUP))
return NULL;
/* Only catch windows with transient mode set to current here. */
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_GROUPCW_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
static WPHolder *groupws_do_prepare_manage(WGroupWS *ws,
const WClientWin *cwin,
const WManageParams *param,
- int redir, int geom_weak)
+ int geom_weak)
{
WGroupAttachParams ap=GROUPATTACHPARAMS_INIT;
WFramedParam fp=FRAMEDPARAM_INIT;
WPHolder *ph;
- if(redir==MANAGE_REDIR_PREFER_YES){
- WRegion *r=(ws->grp.current_managed!=NULL
- ? ws->grp.current_managed->reg
- : NULL);
- WGroupIterTmp tmp;
- WPHolder *ph=NULL;
-
- if(r!=NULL)
- ph=region_prepare_manage(r, cwin, param, MANAGE_REDIR_PREFER_YES);
-
- if(ph==NULL){
- FOR_ALL_MANAGED_BY_GROUP(&ws->grp, r, tmp){
- ph=region_prepare_manage(r, cwin, param,
- MANAGE_REDIR_PREFER_YES);
- if(ph!=NULL)
- break;
- }
- }
- }
-
- if(redir==MANAGE_REDIR_STRICT_YES)
- return NULL;
fp.inner_geom_gravity_set=TRUE;
fp.inner_geom=param->geom;
WPHolder *groupws_prepare_manage(WGroupWS *ws, const WClientWin *cwin,
const WManageParams *param,
- int redir)
+ int priority)
{
+ int cpriority=MANAGE_PRIORITY_SUB(priority, MANAGE_PRIORITY_GROUP);
+ int bpriority=MANAGE_PRIORITY_SUBX(priority, MANAGE_PRIORITY_GROUP);
WRegion *b=(ws->grp.bottom!=NULL ? ws->grp.bottom->reg : NULL);
WPHolder *ph=NULL;
bool act_b=(ws->grp.bottom==ws->grp.current_managed);
: act_b);
if(b!=NULL && use_bottom)
- ph=region_prepare_manage(b, cwin, param, redir);
+ ph=region_prepare_manage(b, cwin, param, bpriority);
+
+ if(ph==NULL){
+ /* Check current */
+ WRegion *r=(ws->grp.current_managed!=NULL
+ ? ws->grp.current_managed->reg
+ : NULL);
+
+ if(r!=NULL && r!=b)
+ ph=region_prepare_manage(r, cwin, param, cpriority);
+ }
+
+ if(ph==NULL && MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_GROUP))
+ ph=groupws_do_prepare_manage(ws, cwin, param, weak);
- if(ph==NULL)
- ph=groupws_do_prepare_manage(ws, cwin, param, redir, weak);
-
if(ph==NULL && b!=NULL && !use_bottom)
- ph=region_prepare_manage(b, cwin, param, redir);
+ ph=region_prepare_manage(b, cwin, param, cpriority);
return ph;
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_GROUPWS_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
/*EXTL_DOC
- * Sets the 'bottom' of \var{ws}. The region \var{reg} must already
+ * Sets the `bottom' of \var{ws}. The region \var{reg} must already
* be managed by \var{ws}, unless \code{nil}.
*/
EXTL_EXPORT_MEMBER
/*EXTL_DOC
- * Returns the 'bottom' of \var{ws}.
+ * Returns the `bottom' of \var{ws}.
*/
EXTL_SAFE
EXTL_EXPORT_MEMBER
frame=OBJ_CAST(reg, WFrame);
if(frame!=NULL){
WFrameMode m=frame_mode(frame);
- if(m!=FRAME_MODE_FLOATING && m!=FRAME_MODE_TRANSIENT)
+ if(m==FRAME_MODE_TILED || m==FRAME_MODE_TILED_ALT)
frame_set_mode(frame, FRAME_MODE_FLOATING);
}
par->geom_set=0;
par->bottom=0;
+ if(extl_table_is_bool_set(tab, "bottom")){
+ par->level=STACKING_LEVEL_BOTTOM;
+ par->level_set=1;
+ par->bottom=1;
+ }
+
if(extl_table_gets_i(tab, "level", &tmp)){
if(tmp>=0){
par->level_set=STACKING_LEVEL_NORMAL;
}
}
- if(extl_table_is_bool_set(tab, "bottom")){
- par->level=STACKING_LEVEL_BOTTOM;
- par->level_set=1;
- par->bottom=1;
- }
-
if(!par->level_set && extl_table_is_bool_set(tab, "modal")){
par->level=STACKING_LEVEL_MODAL1;
par->level_set=1;
*
* \begin{tabularx}{\linewidth}{lX}
* \tabhead{Field & Description}
- * \var{type} & Class name (a string) of the object to be created. Mandatory. \\
- * \var{name} & Name of the object to be created (a string). Optional. \\
- * \var{switchto} & Should the region be switched to (boolean)? Optional. \\
- * \var{level} & Stacking level; default is 1. \\
- * \var{modal} & Make object modal; ignored if level is set. \\
- * \var{sizepolicy} & Size policy. \\
+ * \var{type} & (string) Class of the object to be created. Mandatory. \\
+ * \var{name} & (string) Name of the object to be created. \\
+ * \var{switchto} & (boolean) Should the region be switched to? \\
+ * \var{level} & (integer) Stacking level; default is 1. \\
+ * \var{modal} & (boolean) Make object modal; ignored if level is set. \\
+ * \var{sizepolicy} & (string) Size policy; see Section \ref{sec:sizepolicies}. \\
* \end{tabularx}
*
* In addition parameters to the region to be created are passed in this
typedef WStacking *NxtFn(WGroup *ws, WStacking *st, bool wrap);
-static bool mapped_filt(WStacking *st, void *unused)
-{
- return (st->reg!=NULL && REGION_IS_MAPPED(st->reg));
-}
-
-
static bool focusable(WGroup *ws, WStacking *st, uint min_level)
{
return (st->reg!=NULL
stacking=group_get_stacking(ws);
if(stacking!=NULL)
- min_level=stacking_min_level(stacking, mapped_filt, NULL);
+ min_level=stacking_min_level_mapped(stacking);
st=sti;
while(1){
subtab=region_get_configuration(st->reg);
if(subtab!=extl_table_none()){
- extl_table_sets_i(subtab, "sizepolicy", st->szplcy);
+ extl_table_sets_s(subtab, "sizepolicy",
+ sizepolicy2string(st->szplcy));
extl_table_sets_i(subtab, "level", st->level);
tmpg=REGION_GEOM(st->reg);
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_GROUP_H
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objp.h>
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_GROUPEDPHOLDER_H
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objp.h>
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_GROUPPHOLDER_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_INFOWIN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <stdlib.h>
#include "llist.h"
#include "exec.h"
#include "screen-notify.h"
+#include "key.h"
#include "../version.h"
INIT_HOOK_(clientwin_mapped_hook);
INIT_HOOK_(clientwin_unmapped_hook);
INIT_HOOK_(clientwin_property_change_hook);
+ INIT_HOOK_(ioncore_submap_ungrab_hook);
INIT_HOOK_(region_notify_hook);
ADD_HOOK_(region_notify_hook, ioncore_frame_quasiactivation_notify);
ioncore_g.atom_wm_window_role=XInternAtom(dpy, "WM_WINDOW_ROLE", False);
ioncore_g.atom_checkcode=XInternAtom(dpy, "_ION_CWIN_RESTART_CHECKCODE", False);
ioncore_g.atom_selection=XInternAtom(dpy, "_ION_SELECTION_STRING", False);
+ ioncore_g.atom_dockapp_hack=XInternAtom(dpy, "_ION_DOCKAPP_HACK", False);
ioncore_g.atom_mwm_hints=XInternAtom(dpy, "_MOTIF_WM_HINTS", False);
ioncore_init_xim();
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_IONCORE_H
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
local ioncore=_G.ioncore
return putcmd(cmd, guard, {action = "kpress_wait", kcb = keyspec})
end
+--DOC
+-- Submap enter event for bindings.
+function ioncore.submap_enter(cmd, guard)
+ return putcmd(cmd, guard, {action = "submap_enter"})
+end
+
+--DOC
+-- Submap modifier release event for bindings.
+function ioncore.submap_wait(cmd, guard)
+ return putcmd(cmd, guard, {action = "submap_wait"})
+end
+
+-- DOC
+-- Submap leave event for bindings.
+--function ioncore.submap_leave(cmd, guard)
+-- return putcmd(cmd, guard, {action = "submap_leave"})
+--end
+
local function mact(act_, kcb_, cmd, guard)
local st, en, kcb2_, area_=string.find(kcb_, "([^@]*)@(.*)")
return putcmd(cmd, guard, {
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
warn(TR([[
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
-- This is a slight abuse of the package.loaded variable perhaps, but
dopath('ioncore_misc')
dopath('ioncore_wd')
dopath('ioncore_menudb')
+dopath('ioncore_tabnum')
-- Modifier setup compatibility kludge
local oldindex
-- Export some important functions into global namespace.
export(ioncore,
"submap",
+ "submap_enter",
+ "submap_wait",
"kpress",
"kpress_wait",
"mpress",
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
local ioncore=_G.ioncore
end
-function menus.ctxmenu(reg, sub_or_chld)
+function menus.ctxmenu(reg, sub)
local m, r, s
+ if obj_is(sub, "WGroup") then
+ sub=(sub:bottom() or sub)
+ end
+
-- First, stuff between reg (inclusive) and sub_or_chld (inclusive)
-- at the top level in the menu.
- r=(sub_or_chld or reg)
+ r=(sub or reg)
while r and s~=reg do
local mm=get_ctxmenu(r, s)
m=((m and table.icat(mm, m)) or mm)
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
local group_tmpl = { type="WGroupWS" }
--- /dev/null
+--
+-- ion/share/ioncore_tabnum.lua -- Ioncore tab numbering support
+--
+-- Copyright (c) Tuomo Valkonen 2007.
+--
+-- See the included file LICENSE for details.
+--
+
+ioncore.tabnum={}
+
+local framestate={}
+
+local function do_show(frame)
+ frame:set_grattr('numbered', 'set')
+ framestate[frame]='set'
+end
+
+--DOC
+-- Show tab numbers on \var{frame}, clearing them when submap
+-- grab is released the next time. If \var{delay} is given, in
+-- milliseconds, the numbers are not actually displayed until this
+-- time has passed.
+function ioncore.tabnum.show(frame, delay)
+ if delay and delay>0 then
+ local tmr=ioncore.create_timer()
+ framestate[frame]=tmr
+ tmr:set(delay, function() do_show(frame) end)
+ else
+ do_show(frame)
+ end
+end
+
+--DOC
+-- Clear all tab numbers set by \fnref{ioncore.tabnum.show}.
+function ioncore.tabnum.clear()
+ local st=framestate
+ framestate={}
+
+ for f, s in pairs(st) do
+ if s=='set' then
+ f:set_grattr('numbered', 'unset')
+ elseif obj_is(s, "WTimer") then
+ s:reset()
+ end
+ end
+end
+
+ioncore.get_hook("ioncore_submap_ungrab_hook")
+ :add(ioncore.tabnum.clear)
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
local savefile="saved_wd"
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
local ioncore=_G.ioncore
props={}
pcall(function() props=winprops[c][r][i] or {} end)
for idx, prop in ipairs_r(props) do
- if prop:match(cwin) then
+ if prop:match(cwin, id) then
if prop.oneshot then
table.remove(props, idx)
end
end
end
-local function do_add_winprop(class, role, instance, name, prop)
+local function do_add_winprop(class, role, instance, prop)
ensure_winproptab(class, role, instance)
table.insert(winprops[class][role][instance], prop)
end
--DOC
-- The basic name-based winprop matching criteria.
-function ioncore.match_winprop_name(prop, cwin)
- if not prop.name then
- return true
- else
+function ioncore.match_winprop_dflt(prop, cwin, id)
+ local function chkf(p, i)
+ if p==nil then
+ return true
+ else
+ return (p==(i and true))
+ -- hack for nil
+ end
+ end
+
+ if not chkf(prop.is_transient, id.is_transient) then
+ return false
+ end
+
+ if not chkf(prop.is_dockapp, id.is_dockapp) then
+ return false
+ end
+
+ if prop.name then
local nm=cwin:name()
if nm then
local st, en=string.find(nm, prop.name)
return false
end
end
+
+ return true
end
end
if not list2.match then
- list2.match=ioncore.match_winprop_name
+ list2.match=ioncore.match_winprop_dflt
end
- do_add_winprop(class, role, instance, name, list2)
+ do_add_winprop(class, role, instance, list2)
end
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <math.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_KBRESIZE_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <ctype.h>
+
#include <libtu/objp.h>
+#include <libextl/extl.h>
+#include <libmainloop/defer.h>
+
#include "common.h"
#include "key.h"
#include "binding.h"
#include "cursor.h"
#include "grab.h"
#include "regbind.h"
-#include <libextl/extl.h>
#include "strings.h"
#include "xwindow.h"
static bool waitrelease_handler(WRegion *reg, XEvent *ev)
{
- if(!ioncore_unmod(ev->xkey.state, ev->xkey.keycode))
- return TRUE;
- return FALSE;
+ return (ioncore_unmod(ev->xkey.state, ev->xkey.keycode)==0);
}
}
-static void free_subs(WSubmapState *p)
+static void free_sub(WSubmapState *p)
{
- WSubmapState *next;
+ /*extl_unref_fn(p->leave);
+ watch_reset(&p->leave_reg);
+ */
- while(p!=NULL){
- next=p->next;
- free(p);
- p=next;
+ free(p);
+}
+
+
+void region_free_submapstat(WRegion *reg)
+{
+ while(reg->submapstat!=NULL){
+ WSubmapState *p=reg->submapstat;
+ reg->submapstat=p->next;
+ free_sub(p);
}
}
+WHook *ioncore_submap_ungrab_hook=NULL;
+
+
+static void call_submap_ungrab_hook()
+{
+ hook_call_v(ioncore_submap_ungrab_hook);
+}
+
+
static void clear_subs(WRegion *reg)
{
- while(reg->submapstat!=NULL){
- WSubmapState *tmp=reg->submapstat;
- reg->submapstat=tmp->next;
- free(tmp);
+ region_free_submapstat(reg);
+ mainloop_defer_action(NULL, (WDeferredAction*)call_submap_ungrab_hook);
+/*
+ while(reg!=NULL && reg->submapstat!=NULL){
+ WSubmapState *p=reg->submapstat;
+ reg->submapstat=p->next;
+
+ if(p->leave!=extl_fn_none() && p->leave_reg.obj!=NULL){
+ Watch regw=WATCH_INIT;
+
+ watch_setup(®w, (Obj*)reg, NULL);
+
+ extl_call(p->leave, "o", NULL, p->leave_reg.obj);
+
+ reg=(WRegion*)regw.obj;
+
+ watch_reset(®w);
+ }
+
+ free_sub(p);
}
+*/
}
-static bool add_sub(WRegion *reg, uint key, uint state)
+static WSubmapState *add_sub(WRegion *reg, uint key, uint state)
{
WSubmapState **p;
WSubmapState *s;
s=ALLOC(WSubmapState);
if(s==NULL)
- return FALSE;
+ return NULL;
s->key=key;
s->state=state;
+ /*s->leave=extl_fn_none();
+ watch_init(&s->leave_reg);*/
*p=s;
- return TRUE;
+ return s;
}
}
-/* Return value TRUE = grab needed */
-static bool do_key(WRegion *reg, XKeyEvent *ev)
+enum{GRAB_NONE, GRAB_SUBMAP, GRAB_WAITRELEASE};
+
+
+static WBinding *lookup_binding_(WRegion *reg,
+ int act, uint state, uint kcb,
+ WSubmapState *st,
+ WRegion **binding_owner, WRegion **subreg)
{
- WBinding *binding=NULL;
- WRegion *oreg=NULL, *binding_owner=NULL, *subreg=NULL;
- bool grabbed;
+ WBinding *binding;
- oreg=reg;
- grabbed=(oreg->flags®ION_BINDINGS_ARE_GRABBED);
+ *subreg=NULL;
- if(grabbed){
- /* Find the deepest nested active window grabbing this key. */
- while(reg->active_sub!=NULL)
- reg=reg->active_sub;
+ do{
+ binding=region_lookup_keybinding(reg, act, state, kcb, st,
+ binding_owner);
- do{
- binding=region_lookup_keybinding(reg, ev, oreg->submapstat,
- &binding_owner);
+ if(binding!=NULL)
+ break;
- if(binding!=NULL)
- break;
- if(OBJ_IS(reg, WRootWin))
- break;
-
- subreg=reg;
- reg=REGION_PARENT_REG(reg);
- }while(reg!=NULL);
+ if(OBJ_IS(reg, WRootWin))
+ break;
+
+ *subreg=reg;
+ reg=REGION_PARENT_REG(reg);
+ }while(reg!=NULL);
+
+ return binding;
+}
+
+static WBinding *lookup_binding(WRegion *oreg,
+ int act, uint state, uint kcb,
+ WRegion **binding_owner, WRegion **subreg)
+{
+ WRegion *reg=oreg;
+
+ /* Find the deepest nested active window grabbing this key. */
+ while(reg->active_sub!=NULL)
+ reg=reg->active_sub;
+
+ return lookup_binding_(reg, act, state, kcb, oreg->submapstat,
+ binding_owner, subreg);
+}
+
+
+static void do_call_binding(WBinding *binding, WRegion *reg, WRegion *subreg)
+{
+ WRegion *mgd=region_managed_within(reg, subreg);
+
+ /* TODO: having to pass both mgd and subreg for some handlers
+ * to work is ugly and complex.
+ */
+ extl_call(binding->func, "ooo", NULL, reg, mgd, subreg);
+}
+
+
+static int do_key(WRegion *oreg, XKeyEvent *ev)
+{
+ WBinding *binding=NULL;
+ WRegion *binding_owner=NULL, *subreg=NULL;
+ bool grabbed=(oreg->flags®ION_BINDINGS_ARE_GRABBED);
+ int ret=GRAB_NONE;
+
+ if(grabbed){
+ binding=lookup_binding(oreg, BINDING_KEYPRESS, ev->state, ev->keycode,
+ &binding_owner, &subreg);
}else{
- binding=region_lookup_keybinding(oreg, ev, oreg->submapstat,
+ binding=region_lookup_keybinding(oreg, BINDING_KEYPRESS,
+ ev->state, ev->keycode,
+ oreg->submapstat,
&binding_owner);
}
if(binding!=NULL){
+ bool subs=(oreg->submapstat!=NULL);
+ WBinding *call=NULL;
+
if(binding->submap!=NULL){
- if(add_sub(oreg, ev->keycode, ev->state))
- return grabbed;
- else
- clear_subs(oreg);
- }else if(binding_owner!=NULL){
- WRegion *mgd=region_managed_within(binding_owner, subreg);
- bool subs=(oreg->submapstat!=NULL);
-
- clear_subs(oreg);
+ WSubmapState *s=add_sub(oreg, ev->keycode, ev->state);
+ if(s!=NULL){
+ /*WRegion *own2, *subreg2;
+
+ call=lookup_binding(binding_owner, BINDING_SUBMAP_LEAVE, 0, 0,
+ oreg->submapstat, &own2, &subreg2);
+
+ if(call!=NULL){
+ s->leave=extl_ref_fn(call->func);
+ watch_setup(&s->leave_reg, (Obj*)own2, NULL);
+ }*/
+
+ call=lookup_binding_(binding_owner, BINDING_SUBMAP_ENTER, 0, 0,
+ oreg->submapstat,
+ &binding_owner, &subreg);
+
+ ret=(grabbed ? GRAB_SUBMAP : GRAB_NONE);
+ }
+ }else{
+ call=binding;
if(grabbed)
XUngrabKeyboard(ioncore_g.dpy, CurrentTime);
+ if(ev->state!=0 && !subs && binding->wait)
+ ret=GRAB_WAITRELEASE;
+ }
+
+ if(call!=NULL){
current_kcb=ev->keycode;
current_state=ev->state;
current_submap=subs;
- /* TODO: having to pass both mgd and subreg for some handlers
- * to work is ugly and complex.
- */
- extl_call(binding->func, "ooo", NULL, binding_owner, mgd, subreg);
+ do_call_binding(call, binding_owner, subreg);
current_kcb=0;
-
- if(ev->state!=0 && !subs && binding->wait)
- waitrelease(oreg);
}
- }else if(oreg->submapstat!=NULL){
- clear_subs(oreg);
- }else if(OBJ_IS(oreg, WWindow)){
+ }else if(oreg->submapstat==NULL && OBJ_IS(oreg, WWindow)){
insstr((WWindow*)oreg, ev);
}
- return FALSE;
+ return ret;
}
static bool submapgrab_handler(WRegion* reg, XEvent *xev)
{
XKeyEvent *ev=&xev->xkey;
- if(ev->type!=KeyPress)
+ if(ev->type!=KeyPress){
+ if(ioncore_unmod(ev->state, ev->keycode)==0){
+ WBinding *binding;
+ WRegion *binding_owner, *subreg;
+
+ binding=lookup_binding(reg,
+ BINDING_SUBMAP_RELEASEMOD, 0, 0,
+ &binding_owner, &subreg);
+
+ if(binding!=NULL)
+ do_call_binding(binding, binding_owner, subreg);
+ }
return FALSE;
+ }
+
if(ioncore_ismod(ev->keycode))
return FALSE;
- return !do_key(reg, ev);
+ if(do_key(reg, ev)!=GRAB_SUBMAP){
+ clear_subs(reg);
+ return TRUE;
+ }else{
+ return FALSE;
+ }
}
+
+
static void submapgrab(WRegion *reg)
{
ioncore_grab_establish(reg, submapgrab_handler, clear_subs, 0);
WRegion *reg=(WRegion*)XWINDOW_REGION_OF(ev->window);
if(reg!=NULL){
- if(do_key(reg, ev))
- submapgrab(reg);
+ Watch w=WATCH_INIT;
+ int grab;
+
+ /* reg might be destroyed by binding handlers */
+ watch_setup(&w, (Obj*)reg, NULL);
+
+ grab=do_key(reg, ev);
+
+ reg=(WRegion*)w.obj;
+
+ if(reg!=NULL){
+ if(grab==GRAB_SUBMAP)
+ submapgrab(reg);
+ else if(grab==GRAB_WAITRELEASE)
+ waitrelease(reg);
+ else if(grab==GRAB_NONE && reg->submapstat!=NULL)
+ clear_subs(reg);
+ }
+
+ watch_reset(&w);
}
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_KEY_H
#include <X11/keysym.h>
+#include <libmainloop/hooks.h>
#include "common.h"
#include "clientwin.h"
extern void clientwin_quote_next(WClientWin *cwin);
extern bool ioncore_current_key(uint *kcb, uint *state, bool *sub);
+extern void region_free_submapstat(WRegion *reg);
+
+extern WHook *ioncore_submap_ungrab_hook;
+
#endif /* ION_IONCORE_KEY_H */
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include "common.h"
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_LLIST_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objp.h>
if(r==NULL)
return NULL;
-
- return region_prepare_manage(r, cwin, param, MANAGE_REDIR_PREFER_NO);
+
+ return region_prepare_manage(r, cwin, param, MANAGE_PRIORITY_NONE);
}
if(ph==NULL){
ph=region_prepare_manage(reg, cwin, param,
- MANAGE_REDIR_PREFER_YES);
+ MANAGE_PRIORITY_NONE);
if(ph==NULL)
destroy_obj((Obj*)reg);
if(fs_scr!=NULL){
WPHolder *fs_ph=region_prepare_manage((WRegion*)fs_scr, cwin, param,
- MANAGE_REDIR_STRICT_NO);
+ MANAGE_PRIORITY_NOREDIR);
if(fs_ph!=NULL){
int swf=(param->switchto ? PHOLDER_ATTACH_SWITCHTO : 0);
if(ph==NULL){
/* Find a placeholder for non-fullscreen state */
ph=region_prepare_manage((WRegion*)scr, cwin, param,
- MANAGE_REDIR_PREFER_YES);
-
+ MANAGE_PRIORITY_NONE);
+
if(try_fullscreen(cwin, scr, param)){
if(pholder_target(ph)!=(WRegion*)region_screen_of((WRegion*)cwin)){
WRegion *grp=region_groupleader_of((WRegion*)cwin);
WPHolder *region_prepare_manage(WRegion *reg, const WClientWin *cwin,
- const WManageParams *param, int redir)
+ const WManageParams *param, int priority)
{
WPHolder *ret=NULL;
CALL_DYN_RET(ret, WPHolder*, region_prepare_manage, reg,
- (reg, cwin, param, redir));
+ (reg, cwin, param, priority));
return ret;
}
WPHolder *region_prepare_manage_default(WRegion *reg, const WClientWin *cwin,
- const WManageParams *param, int redir)
+ const WManageParams *param, int priority)
{
- WRegion *curr;
-
- if(redir==MANAGE_REDIR_STRICT_NO)
- return NULL;
-
- curr=region_current(reg);
+ int cpriority=MANAGE_PRIORITY_SUB(priority, MANAGE_PRIORITY_NONE);
+ WRegion *curr=region_current(reg);
if(curr==NULL)
return NULL;
- return region_prepare_manage(curr, cwin, param, MANAGE_REDIR_PREFER_YES);
+ return region_prepare_manage(curr, cwin, param, cpriority);
}
bool region_manage_clientwin(WRegion *reg, WClientWin *cwin,
- const WManageParams *par, int redir)
+ const WManageParams *par, int priority)
{
bool ret;
- WPHolder *ph=region_prepare_manage(reg, cwin, par, redir);
+ WPHolder *ph=region_prepare_manage(reg, cwin, par, priority);
int swf=(par->switchto ? PHOLDER_ATTACH_SWITCHTO : 0);
if(ph==NULL)
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_MANAGE_H
{FALSE, FALSE, FALSE, FALSE, FALSE, ForgetGravity, {0, 0, 0, 0}, NULL}
enum{
- MANAGE_REDIR_PREFER_YES,
- MANAGE_REDIR_PREFER_NO,
- MANAGE_REDIR_STRICT_YES,
- MANAGE_REDIR_STRICT_NO
+ MANAGE_PRIORITY_NONE,
+ MANAGE_PRIORITY_LOW,
+ MANAGE_PRIORITY_NORMAL,
+ MANAGE_PRIORITY_GROUP,
+ MANAGE_PRIORITY_NO,
+ /* Special */
+ MANAGE_PRIORITY_NOREDIR
};
+#define MANAGE_PRIORITY_OK(PRIORITY, OUR) \
+ ((PRIORITY) <= (OUR) || (PRIORITY)==MANAGE_PRIORITY_NOREDIR)
+
+#define MANAGE_PRIORITY_SUB(PRIORITY, OUR) \
+ ((PRIORITY)==MANAGE_PRIORITY_NOREDIR \
+ ? MANAGE_PRIORITY_NO \
+ : (PRIORITY) < (OUR) ? (OUR) : (PRIORITY))
+
+#define MANAGE_PRIORITY_SUBX(PRIORITY, OUR) \
+ ((PRIORITY)==MANAGE_PRIORITY_NOREDIR || (OUR) < (PRIORITY) \
+ ? MANAGE_PRIORITY_NO \
+ : MANAGE_PRIORITY_NONE)
+
+
DECLSTRUCT(WManageParams){
bool switchto;
bool jumpto;
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_MODULES_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <limits.h>
/*EXTL_DOC
- * Move \var{r} ''right'' within objects managed by \var{mplex} on list 1.
+ * Move \var{r} ``right'' within objects managed by \var{mplex} on list 1.
*/
EXTL_EXPORT_MEMBER
void mplex_inc_index(WMPlex *mplex, WRegion *r)
/*EXTL_DOC
- * Move \var{r} ''right'' within objects managed by \var{mplex} on list 1.
+ * Move \var{r} ``left'' within objects managed by \var{mplex} on list 1.
*/
EXTL_EXPORT_MEMBER
void mplex_dec_index(WMPlex *mplex, WRegion *r)
/*{{{ Focus */
-static WStacking *mplex_do_to_focus(WMPlex *mplex, WStacking *to_try)
-{
- WStacking *stacking=mplex_get_stacking(mplex);
- WStacking *st=NULL;
-
- if(stacking==NULL)
- return NULL;
+typedef struct{
+ WMPlex *mplex;
+ WStacking *to_try;
+ WStacking *group_st;
+ PtrList **hidelist;
+ bool try_hard;
+} FiltData;
- if(to_try!=NULL && (to_try->reg==NULL || !REGION_IS_MAPPED(to_try->reg)))
- to_try=NULL;
-
- st=stacking_find_to_focus_mapped(stacking, to_try, NULL);
-
- if(st!=NULL)
- return st;
- else if(mplex->mx_current!=NULL)
- return mplex->mx_current->st;
- else
- return NULL;
-}
-
-static WStacking *maybe_focusable(WRegion *reg)
+static WRegion *manager_within(WMPlex *mplex, WStacking *st)
{
- if(reg==NULL || !REGION_IS_MAPPED(reg))
- return NULL;
-
- return ioncore_find_stacking(reg);
+ return region_managed_within((WRegion*)mplex, st->reg);
}
-static WStacking *stacking_within(WMPlex *mplex, WRegion *reg)
+static WStacking *stacking_within(WMPlex *mplex, WStacking *st)
{
- while(reg!=NULL && REGION_MANAGER(reg)!=(WRegion*)mplex)
- reg=REGION_MANAGER(reg);
+ WRegion *reg=manager_within(mplex, st);
- return maybe_focusable(reg);
+ return (reg==NULL
+ ? NULL
+ : (reg==st->reg
+ ? st
+ : ioncore_find_stacking(reg)));
}
-static WStacking *mplex_to_focus(WMPlex *mplex)
+/* Mutually exclusive regions can't be pseudomodal */
+#define IS_PSEUDOMODAL(ST) ((ST)->lnode==NULL && (ST)->pseudomodal)
+
+
+static bool mapped_pseudomodal_include_filt(WStacking *st, void *data_)
{
- WStacking *to_try=NULL;
- WRegion *reg=NULL;
+ FiltData *data=(FiltData*)data_;
+ WStacking *stw;
- to_try=maybe_focusable(REGION_ACTIVE_SUB(mplex));
+ if(st->reg==NULL || !REGION_IS_MAPPED(st->reg))
+ return FALSE;
+
+ if(!data->hidelist
+ || (data->to_try==NULL && data->group_st==NULL)
+ || st->level<STACKING_LEVEL_MODAL1){
+ return TRUE;
+ }
- if(to_try==NULL){
- /* Search focus history */
- for(reg=ioncore_g.focus_current; reg!=NULL; reg=reg->active_next){
- to_try=stacking_within(mplex, reg);
- if(to_try!=NULL)
- break;
- }
+ /* Ok, modal node in the way. Let's see if it is pseudomodal
+ * and can be hidden.
+ */
+
+ stw=stacking_within(data->mplex, st);
+
+ /* This should not happen */
+ if(stw==NULL || stw->reg==NULL)
+ return FALSE;
+
+ /* The node is within the same group, so it can not be hidden.
+ * Latter case should not happen.
+ */
+ if(stw==data->group_st || stw==data->to_try)
+ return TRUE;
+
+ if(IS_PSEUDOMODAL(stw)){
+ /* Don't insert multiple times. */
+ return !ptrlist_reinsert_first(data->hidelist, stw);
}
+
+ return TRUE;
+}
+
+
+static bool mgr_pseudomodal_approve_filt(WStacking *st, void *data_)
+{
+ FiltData *data=(FiltData*)data_;
- return mplex_do_to_focus(mplex, to_try);
+ return (data->group_st==NULL || st==data->group_st ||
+ manager_within(data->mplex, st)==data->group_st->reg);
}
-static WStacking *mplex_do_to_focus_on(WMPlex *mplex, WStacking *node,
- WStacking *to_try)
+WStacking *mplex_find_to_focus(WMPlex *mplex,
+ WStacking *to_try,
+ WStacking *group_st,
+ PtrList **hidelist)
{
+ WStackingFilter *fi=mapped_pseudomodal_include_filt;
+ WStackingFilter *fa=mgr_pseudomodal_approve_filt;
WStacking *stacking=mplex_get_stacking(mplex);
- WStacking *st=NULL;
+ FiltData data;
+ WStacking *st;
if(stacking==NULL)
return NULL;
-
+
if(to_try!=NULL && (to_try->reg==NULL || !REGION_IS_MAPPED(to_try->reg)))
to_try=NULL;
- return stacking_find_to_focus_mapped(stacking, to_try, node->reg);
+ data.mplex=mplex;
+ data.to_try=to_try;
+ data.group_st=group_st;
+ data.hidelist=hidelist;
+
+ st=stacking_find_to_focus(stacking, to_try, fi, fa, &data);
+
+ if(st==NULL && hidelist!=NULL)
+ ptrlist_clear(hidelist);
+
+ return st;
+}
+
+
+static WStacking *mplex_do_to_focus(WMPlex *mplex, WStacking *to_try,
+ PtrList **hidelist)
+{
+ return mplex_find_to_focus(mplex, to_try, NULL, hidelist);
}
-static WStacking *mplex_to_focus_on(WMPlex *mplex, WStacking *node,
- WStacking *to_try)
+static WStacking *mplex_do_to_focus_on(WMPlex *mplex, WStacking *node,
+ WStacking *to_try,
+ PtrList **hidelist)
{
WGroup *grp=OBJ_CAST(node->reg, WGroup);
WStacking *st;
if(grp!=NULL){
if(to_try==NULL)
to_try=grp->current_managed;
- st=mplex_do_to_focus_on(mplex, node, to_try);
+ st=mplex_find_to_focus(mplex, to_try, node, hidelist);
if(st!=NULL || to_try!=NULL)
return st;
+ if(hidelist!=NULL)
+ ptrlist_clear(hidelist);
/* We don't know whether something is blocking focus here,
* or if there was nothing to focus (as node->reg itself
* isn't on the stacking list).
*/
}
- st=mplex_do_to_focus(mplex, node);
- return (st==node ? st : NULL);
+ st=mplex_do_to_focus(mplex, node, hidelist);
+
+ if(st==node)
+ return st;
+
+ if(hidelist!=NULL)
+ ptrlist_clear(hidelist);
+
+ return NULL;
+}
+
+
+static WStacking *maybe_focusable(WRegion *reg)
+{
+ if(reg==NULL || !REGION_IS_MAPPED(reg))
+ return NULL;
+
+ return ioncore_find_stacking(reg);
+}
+
+
+static WStacking *has_stacking_within(WMPlex *mplex, WRegion *reg)
+{
+ while(reg!=NULL && REGION_MANAGER(reg)!=(WRegion*)mplex)
+ reg=REGION_MANAGER(reg);
+
+ return maybe_focusable(reg);
+}
+
+
+static WStacking *mplex_to_focus(WMPlex *mplex)
+{
+ WStacking *to_try=NULL;
+ WRegion *reg=NULL;
+ WStacking *st;
+
+ to_try=maybe_focusable(REGION_ACTIVE_SUB(mplex));
+
+ if(to_try==NULL){
+ /* Search focus history */
+ for(reg=ioncore_g.focus_current; reg!=NULL; reg=reg->active_next){
+ to_try=has_stacking_within(mplex, reg);
+ if(to_try!=NULL)
+ break;
+ }
+ }
+
+ st=mplex_do_to_focus(mplex, to_try, NULL);
+
+ return (st!=NULL
+ ? st
+ : (mplex->mx_current!=NULL
+ ? mplex->mx_current->st
+ : NULL));
}
bool ret=TRUE;
if(node!=NULL){
- foc=mplex_to_focus_on(mplex, node, NULL);
+ foc=mplex_do_to_focus_on(mplex, node, NULL, NULL);
ret=(foc!=NULL);
}
WStacking *sub, int flags,
WPrepareFocusResult *res)
{
+ bool ew=(flags®ION_GOTO_ENTERWINDOW);
+ PtrList *hidelist=NULL;
+ PtrList **hidelistp=(ew ? NULL : &hidelist);
WStacking *foc;
if(sub==NULL && node==NULL)
return FALSE;
/* Display the node in any case */
- if(node!=NULL && !(flags®ION_GOTO_ENTERWINDOW))
+ if(node!=NULL && !ew)
mplex_do_node_display(mplex, node, TRUE);
if(!region_prepare_focus((WRegion*)mplex, flags, res))
return FALSE;
if(node!=NULL)
- foc=mplex_to_focus_on(mplex, node, sub);
+ foc=mplex_do_to_focus_on(mplex, node, sub, hidelistp);
else
- foc=mplex_do_to_focus(mplex, sub);
+ foc=mplex_do_to_focus(mplex, sub, hidelistp);
if(foc!=NULL){
+ while(hidelist!=NULL){
+ WStacking *st=(WStacking*)ptrlist_take_first(&hidelist);
+ st->hidden=TRUE;
+ region_unmap(st->reg);
+ }
+
if(ioncore_g.autoraise &&
!(flags®ION_GOTO_ENTERWINDOW) &&
foc->level>STACKING_LEVEL_BOTTOM){
/*EXTL_DOC
* Set the visibility of the region \var{reg} on \var{mplex}
- * as specified with the parameter \var{how} (set/unset/toggle).
+ * as specified with the parameter \var{how}
+ * (one of \codestr{set}, \codestr{unset}, or \codestr{toggle}).
* The resulting state is returned.
*/
EXTL_EXPORT_AS(WMPlex, set_hidden)
: SIZEPOLICY_FULL_EXACT));
modal=(param->flags&MPLEX_ATTACH_LEVEL
- ? param->level>=STACKING_LEVEL_MODAL1
- : param->flags&MPLEX_ATTACH_MODAL);
+ && param->level>=STACKING_LEVEL_MODAL1);
level=(param->flags&MPLEX_ATTACH_LEVEL
? param->level
- : (param->flags&MPLEX_ATTACH_MODAL
- ? STACKING_LEVEL_MODAL1
- : (param->flags&MPLEX_ATTACH_UNNUMBERED
- ? STACKING_LEVEL_NORMAL
- : STACKING_LEVEL_BOTTOM)));
+ : (param->flags&MPLEX_ATTACH_UNNUMBERED
+ ? STACKING_LEVEL_NORMAL
+ : STACKING_LEVEL_BOTTOM));
hidden=(param->flags&MPLEX_ATTACH_HIDDEN
&& (param->flags&MPLEX_ATTACH_UNNUMBERED
node->hidden=TRUE;
node->szplcy=szplcy;
node->level=level;
+ node->pseudomodal=(param->flags&MPLEX_ATTACH_PSEUDOMODAL ? 1 : 0);
if(lnode!=NULL){
llist_link_after(&(mplex->mx_list),
{
int layer=1;
int tmp;
+ char *tmpstr;
int ok=~mask;
- if(extl_table_gets_i(tab, "level", &tmp)){
- if(tmp>=0 && ok&MPLEX_ATTACH_LEVEL){
- par->flags|=MPLEX_ATTACH_LEVEL;
- par->level=tmp;
+ if(ok&MPLEX_ATTACH_LEVEL){
+ if(extl_table_gets_i(tab, "level", &tmp)){
+ if(tmp>=0){
+ par->flags|=MPLEX_ATTACH_LEVEL;
+ par->level=tmp;
+ }
}
- }
- if(extl_table_is_bool_set(tab, "modal"))
- par->flags|=MPLEX_ATTACH_MODAL&ok;
+ if(extl_table_is_bool_set(tab, "modal"))
+ par->level=maxof(par->level, STACKING_LEVEL_MODAL1);
+ }
if(extl_table_is_bool_set(tab, "unnumbered"))
par->flags|=MPLEX_ATTACH_UNNUMBERED&ok;
if(extl_table_is_bool_set(tab, "hidden"))
par->flags|=MPLEX_ATTACH_HIDDEN&ok;
+
+ if(extl_table_is_bool_set(tab, "pseudomodal"))
+ par->flags|=MPLEX_ATTACH_PSEUDOMODAL&ok;
if(extl_table_gets_i(tab, "index", &(par->index)))
par->flags|=MPLEX_ATTACH_INDEX&ok;
- if(extl_table_gets_i(tab, "sizepolicy", &tmp)){
- if(ok&MPLEX_ATTACH_SIZEPOLICY){
+ if(ok&MPLEX_ATTACH_SIZEPOLICY){
+ if(extl_table_gets_s(tab, "sizepolicy", &tmpstr)){
+ WSizePolicy tmpp;
+ if(string2sizepolicy(tmpstr, &tmpp)){
+ par->flags|=MPLEX_ATTACH_SIZEPOLICY;
+ par->szplcy=tmpp;
+ }
+ free(tmpstr);
+ }else if(extl_table_gets_i(tab, "sizepolicy", &tmp)){
+ /* Backwards compat. numeric version */
par->flags|=MPLEX_ATTACH_SIZEPOLICY;
par->szplcy=tmp;
}
* \var{hidden} & (boolean) Attach hidden, if not prevented
* by e.g. the mutually exclusive list being empty.
* This option overrides \var{switchto}. \\
- * \var{sizepolicy} & (integer) Size policy. \\
+ * \var{pseudomodal} & (boolean) The attached region is ``pseudomodal''
+ * if the stacking level dictates it to be modal.
+ * This means that the region may be hidden to display
+ * regions with lesser stacking levels. \\
+ * \var{sizepolicy} & (string) Size policy; see Section \ref{sec:sizepolicies}. \\
* \var{geom} & (table) Geometry specification. \\
* \end{tabularx}
*
WPHolder *mplex_prepare_manage(WMPlex *mplex, const WClientWin *cwin,
- const WManageParams *param, int redir)
+ const WManageParams *param, int priority)
{
+ int cpriority=MANAGE_PRIORITY_SUB(priority, MANAGE_PRIORITY_NORMAL);
WMPlexAttachParams ap;
WPHolder *ph=NULL;
WMPlexPHolder *mph;
WLListNode *after;
- if(redir==MANAGE_REDIR_STRICT_YES || redir==MANAGE_REDIR_PREFER_YES){
+ /* Check current */ {
WStacking *cur=mplex_current_node(mplex);
if(cur!=NULL){
- ph=region_prepare_manage(cur->reg, cwin, param,
- MANAGE_REDIR_PREFER_YES);
+ ph=region_prepare_manage(cur->reg, cwin, param, cpriority);
if(ph!=NULL)
return ph;
}
if(mplex->mx_current!=NULL && mplex->mx_current->st!=cur){
ph=region_prepare_manage(mplex->mx_current->st->reg,
- cwin, param,
- MANAGE_REDIR_PREFER_YES);
+ cwin, param, cpriority);
if(ph!=NULL)
return ph;
}
}
- if(redir==MANAGE_REDIR_STRICT_YES)
+ if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_NORMAL))
return NULL;
ap.flags=((param->switchto ? MPLEX_ATTACH_SWITCHTO : 0)
* \begin{tabularx}{\linewidth}{lX}
* \tabhead{Field & Description}
* \var{pos} & The corner of the screen to place the status display
- * in. One of \code{tl}, \code{tr}, \var{bl} or \var{br}. \\
- * \var{action} & If this field is set to \code{keep}, \var{corner}
+ * in: one of \codestr{tl}, \codestr{tr}, \codestr{bl}
+ * or \codestr{br}. \\
+ * \var{action} & If this field is set to \codestr{keep}, \var{corner}
* and \var{orientation} are changed for the existing
- * status display. If this field is set to \var{remove},
+ * status display. If this field is set to \codestr{remove},
* the existing status display is removed. If this
- * field is not set or is set to \code{replace}, a
+ * field is not set or is set to \codestr{replace}, a
* new status display is created and the old, if any,
* removed. \\
* \end{tabularx}
if(st!=extl_table_none()){
if(mplex->mx_current!=NULL && node==mplex->mx_current->st)
extl_table_sets_b(st, "switchto", TRUE);
- extl_table_sets_i(st, "sizepolicy", node->szplcy);
+ extl_table_sets_s(st, "sizepolicy",
+ sizepolicy2string(node->szplcy));
extl_table_sets_i(st, "level", node->level);
g=extl_table_from_rectangle(®ION_GEOM(node->reg));
extl_table_sets_t(st, "geom", g);
extl_unref_table(g);
if(STACKING_IS_HIDDEN(node))
extl_table_sets_b(st, "hidden", TRUE);
+ if(STACKING_IS_PSEUDOMODAL(node))
+ extl_table_sets_b(st, "pseudomodal", TRUE);
if(unnumbered)
extl_table_sets_b(st, "unnumbered", TRUE);
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_MPLEX_H
#define MPLEX_ATTACH_SWITCHTO 0x0001 /* switch to region */
#define MPLEX_ATTACH_UNNUMBERED 0x0002 /* do not put on mut.ex list */
#define MPLEX_ATTACH_HIDDEN 0x0004 /* should be hidden */
-#define MPLEX_ATTACH_MODAL 0x0008 /* shortcut.. */
+#define MPLEX_ATTACH_PSEUDOMODAL 0x0004 /* pseudomodal (if modal) */
#define MPLEX_ATTACH_LEVEL 0x0010 /* level field set */
#define MPLEX_ATTACH_GEOM 0x0020 /* geometry field is set */
#define MPLEX_ATTACH_SIZEPOLICY 0x0040 /* size policy field is set */
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objp.h>
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_MPLEXPHOLDER_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include "common.h"
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_MWMHINTS_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
/*EXTL_DOC
* Set the name of \var{reg} to \var{p}. If the name is already in use,
- * an instance number suffix \code{<n>} will be attempted. If \var{p} has
+ * an instance number suffix \codestr{<n>} will be attempted. If \var{p} has
* such a suffix, it will be modified, otherwise such a suffix will be
* added. Setting \var{p} to nil will cause current name to be removed.
*/
/*EXTL_DOC
* Similar to \fnref{WRegion.set_name} except if the name is already in use,
* other instance numbers will not be attempted. The string \var{p} should
- * not contain a \code{<n>} suffix or this function will fail.
+ * not contain a \codestr{<n>} suffix or this function will fail.
*/
EXTL_EXPORT_MEMBER
bool region_set_name_exact(WRegion *reg, const char *p)
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_NAMES_H
*
* Copyright (c) Tuomo Valkonen 2006-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
/*EXTL_DOC
* Find region next from \var{reg} in direction \var{dirstr}
- * (up/down/left/right/next/prev/any). The table \var{param} may
- * contain the boolean field \var{nowrap}, instructing not to wrap
+ * (\codestr{up}, \codestr{down}, \codestr{left}, \codestr{right},
+ * \codestr{next}, \codestr{prev}, or \codestr{any}). The table \var{param}
+ * may contain the boolean field \var{nowrap}, instructing not to wrap
* around, and the \type{WRegion}s \var{no_ascend} and \var{no_descend},
* and boolean functions \var{ascend_filter} and \var{descend_filter}
* on \var{WRegion} pairs (\var{to}, \var{from}), are used to decide when
/*EXTL_DOC
- * Find first region within \var{reg} in direction \var{dirstr}
- * (up/down/left/right/beg/end/any). For information on \var{param},
- * see \fnref{ioncore.navi_next}.
+ * Find first region within \var{reg} in direction \var{dirstr}.
+ * For information on \var{param}, see \fnref{ioncore.navi_next}.
*/
EXTL_EXPORT
WRegion *ioncore_navi_first(WRegion *reg, const char *dirstr, ExtlTab param)
/*EXTL_DOC
- * Go to region next from \var{reg} in direction \var{dirstr}
- * (up/down/left/right/next/prev/any). For information on \var{param},
- * see \fnref{ioncore.navi_next}. Additionally this function supports
- * the boolean \var{nofront} field, for not bringing the object to
- * front.
+ * Go to region next from \var{reg} in direction \var{dirstr}.
+ * For information on \var{param}, see \fnref{ioncore.navi_next}.
+ * Additionally this function supports the boolean \var{nofront}
+ * field, for not bringing the object to front.
*/
EXTL_EXPORT
WRegion *ioncore_goto_next(WRegion *reg, const char *dirstr, ExtlTab param)
/*EXTL_DOC
- * Go to first region within \var{reg} in direction \var{dirstr}
- * (up/down/left/right/beg/end/any). For information on \var{param},
- * see \fnref{ioncore.navi_next}. Additionally this function supports
- * the boolean \var{nofront} field, for not bringing the object to
- * front.
+ * Go to first region within \var{reg} in direction \var{dirstr}.
+ * For information on \var{param}, see \fnref{ioncore.navi_next}.
+ * Additionally this function supports the boolean \var{nofront} field,
+ * for not bringing the object to front.
*/
EXTL_EXPORT
WRegion *ioncore_goto_first(WRegion *reg, const char *dirstr, ExtlTab param)
*
* Copyright (c) Tuomo Valkonen 2006-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_NAVI_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <X11/Xatom.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_NETWM_H
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objp.h>
*
* Copyright (c) Tuomo Valkonen 2005-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_PHOLDER_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include "common.h"
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_POINTER_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include "presize.h"
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_PRESIZE_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <X11/Xmd.h>
if(!ioncore_g.use_mb){
st=XStringListToTextProperty((char **)&ptr, n, &prop);
}else{
-#ifdef X_HAVE_UTF8_STRING
- st=XmbTextListToTextProperty(ioncore_g.dpy, (char **)ptr, n,
- XUTF8StringStyle, &prop);
-#else
st=XmbTextListToTextProperty(ioncore_g.dpy, (char **)ptr, n,
XTextStyle, &prop);
-#endif
st=!st;
}
/*EXTL_DOC
* Modify a window property. The \var{mode} is one of
- * \code{"replace"}, \code{"prepend"} or \code{"append"}, and format
+ * \codestr{replace}, \codestr{prepend} or \codestr{append}, and format
* is either 8, 16 or 32. Also see \fnref{ioncore.x_get_window_property}
* and the \code{XChangeProperty}(3) manual page.
*/
/*EXTL_DOC
- * Get a text property for a window (\code{STRING}, \code{COMPOUND_TEXT},
- * or \code{UTF8_STRING} property converted). The fields in the returned
+ * Get a text property for a window. The fields in the returned
* table (starting from 1) are the null-separated parts of the property.
* See the \code{XGetTextProperty}(3) manual page for more information.
*/
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_PROPERTY_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/minmax.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_RECTANGLE_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
}
-WBinding *region_lookup_keybinding(WRegion *reg, const XKeyEvent *ev,
+WBinding *region_lookup_keybinding(WRegion *reg,
+ int act, uint state, uint kcb,
const WSubmapState *sc,
WRegion **binding_owner_ret)
{
continue;
}
- binding=bindmap_lookup_binding(bindmap, BINDING_KEYPRESS, ev->state, ev->keycode);
+ binding=bindmap_lookup_binding(bindmap, act, state, kcb);
if(binding!=NULL)
break;
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_REGBIND_H
DECLSTRUCT(WSubmapState){
uint key, state;
WSubmapState *next;
+ /* ExtlFn leave; */
+ /* Watch leave_reg; */
};
extern void region_remove_bindings(WRegion *reg);
-extern WBinding *region_lookup_keybinding(WRegion *reg, const XKeyEvent *ev,
+extern WBinding *region_lookup_keybinding(WRegion *reg,
+ int act, uint state, uint kcb,
const WSubmapState *sc,
WRegion **binding_owner_ret);
extern WBinding *region_lookup_binding(WRegion *reg, int act, uint state,
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_REGINFO_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_REGION_ITER_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
#include "activity.h"
#include "region-iter.h"
#include "return.h"
+#include "key.h"
#define D2(X)
D(warn("Region to be focused next destroyed[1]."));
ioncore_g.focus_next=NULL;
}
-
+
+ assert(reg->submapstat==NULL);
+ /*region_free_submapstat(reg);*/
region_detach_manager(reg);
region_unset_return(reg);
region_unset_parent(reg);
/*EXTL_DOC
- * Return the object, if any, that is considered ''currently active''
+ * Return the object, if any, that is considered ``currently active''
* within the objects managed by \var{mplex}.
*/
EXTL_SAFE
* the client supports the \code{WM_DELETE} protocol (see also
* \fnref{WClientWin.kill}). The region will not be destroyed when
* this function returns. To find out if and when it is destroyed,
- * use the "deinit" notification. If \var{relocate} is not set, and
- * \var{reg} manages other regions, it will not be closed. Otherwise
+ * use the \codestr{deinit} notification. If \var{relocate} is not set,
+ * and \var{reg} manages other regions, it will not be closed. Otherwise
* the managed regions will be attempted to be relocated.
*/
EXTL_EXPORT_MEMBER
/*EXTL_DOC
* Request ordering. Currently supported values for \var{ord}
- * are 'front' and 'back'.
+ * are \codestr{front} and \codestr{back}.
*/
EXTL_EXPORT_AS(WRegion, rqorder)
bool region_rqorder_extl(WRegion *reg, const char *ord)
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_REGION_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <stdio.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_RESIZE_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/rb.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_RETURN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <unistd.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_ROOTWIN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_SAVELOAD_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
void ioncore_screen_activity_notify(WRegion *reg, WRegionNotify how)
{
if(how==ioncore_g.notifies.activity){
- WScreen *scr=region_screen_of(reg);
-
- screen_update_infowin(scr);
- screen_update_notifywin(scr);
-
+ screen_update_notifywin(region_screen_of(reg));
+ }else if(how==ioncore_g.notifies.name){
+ if(region_is_activity(reg))
+ screen_update_notifywin(region_screen_of(reg));
}
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_SCREEN_NOTIFY_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_SCREEN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <X11/Xmd.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_SELECTION_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
void sizehints_correct(const WSizeHints *hints, int *wp, int *hp,
bool min, bool override_no_constrain)
{
- int w=*wp, wa;
- int h=*hp, ha;
+ int w=*wp, tw, bw=(hints->base_set ? hints->base_width : 0);
+ int h=*hp, th, bh=(hints->base_set ? hints->base_height : 0);
int bs=0;
- if(min){
+ if(min && hints->min_set){
w=maxof(w, hints->min_width);
h=maxof(h, hints->min_height);
}
*hp=h;
return;
}
-
- wa=w-hints->base_width;
- ha=h-hints->base_height;
- if(wa>=0 && ha>=0){
- correct_aspect(wa, ha, hints, &wa, &ha);
- w=wa+hints->base_width;
- h=ha+hints->base_height;
+ tw=w-bw;
+ th=h-bh;
+
+ if(tw>=0 && th>=0)
+ correct_aspect(tw, th, hints, &tw, &th);
+
+ if(hints->inc_set){
+ if(tw>0)
+ tw=(tw/hints->width_inc)*hints->width_inc;
+ if(th>0)
+ th=(th/hints->height_inc)*hints->height_inc;
}
+ w=tw+bw;
+ h=th+bh;
+
if(hints->max_set){
w=minof(w, hints->max_width);
h=minof(h, hints->max_height);
}
-
- if(hints->inc_set){
- /* base size should be set to 0 if none given by user program */
- bs=(hints->base_set ? hints->base_width : 0);
- if(w>bs)
- w=((w-bs)/hints->width_inc)*hints->width_inc+bs;
- bs=(hints->base_set ? hints->base_height : 0);
- if(h>bs)
- h=((h-bs)/hints->height_inc)*hints->height_inc+bs;
- }
*wp=w;
*hp=h;
}
}
- if(hints->min_width<0)
- hints->min_width=0;
- if(hints->min_height<0)
- hints->min_height=0;
+ hints->min_width=maxof(hints->min_width, 0);
+ hints->min_height=maxof(hints->min_height, 0);
if(!(hints->flags&PBaseSize) || hints->base_width<0)
- hints->base_width=0;
+ hints->base_width=hints->min_width;
if(!(hints->flags&PBaseSize) || hints->base_height<0)
- hints->base_height=0;
-
+ hints->base_height=hints->min_height;
if(hints->flags&PMaxSize){
- if(hints->max_width<hints->min_width)
- hints->max_width=hints->min_width;
- if(hints->max_height<hints->min_height)
- hints->max_height=hints->min_height;
+ hints->max_width=maxof(hints->max_width, hints->min_width);
+ hints->max_height=maxof(hints->max_height, hints->min_height);
}
hints->flags|=(PBaseSize|PMinSize);
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_SIZEHINT_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/minmax.h>
}
-struct szplcy_spec {
- const char *spec;
- int szplcy;
-};
-
-
/* translation table for sizepolicy specifications */
-static struct szplcy_spec szplcy_specs[] = {
+static StringIntMap szplcy_specs[] = {
{"default", SIZEPOLICY_DEFAULT},
{"full", SIZEPOLICY_FULL_EXACT},
{"full_bounds", SIZEPOLICY_FULL_BOUNDS},
bool string2sizepolicy(const char *szplcy, WSizePolicy *value)
{
- const struct szplcy_spec *sp;
+ int tmp;
- *value=SIZEPOLICY_DEFAULT;
-
- for(sp=szplcy_specs; sp->spec; ++sp){
- if(strcasecmp(szplcy,sp->spec)==0){
- *value=sp->szplcy;
- return TRUE;
- }
- }
+ tmp=stringintmap_value(szplcy_specs, szplcy, -1);
- return FALSE;
+ if(tmp==-1){
+ *value=SIZEPOLICY_DEFAULT;
+ return FALSE;
+ }else{
+ *value=tmp;
+ return TRUE;
+ }
}
+
+const char *sizepolicy2string(WSizePolicy szplcy)
+{
+ return stringintmap_key(szplcy_specs, szplcy, NULL);
+}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_SIZEPOLICY_H
WFitParams *fp);
-bool string2sizepolicy(const char *szplcy, WSizePolicy *value);
-
+extern bool string2sizepolicy(const char *szplcy, WSizePolicy *value);
+extern const char *sizepolicy2string(WSizePolicy szplcy);
#endif /* ION_IONCORE_SIZEPOLICY_H */
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/rb.h>
+#include <libtu/minmax.h>
#include "common.h"
#include "region.h"
st->szplcy=SIZEPOLICY_DEFAULT;
st->hidden=FALSE;
st->lnode=NULL;
+ st->pseudomodal=FALSE;
}
return st;
WStackingFilter *include_filt,
void *filt_data)
{
+ uint min_level=STACKING_LEVEL_BOTTOM;
WStacking *st=NULL;
- uint min_level=0;
if(stacking==NULL)
return STACKING_LEVEL_BOTTOM;
}
-WStacking *stacking_find_to_focus(WStacking *stacking, WStacking *to_try,
+WStacking *stacking_find_to_focus(WStacking *stacking,
+ WStacking *to_try,
WStackingFilter *include_filt,
WStackingFilter *approve_filt,
void *filt_data)
{
+ uint min_level=STACKING_LEVEL_BOTTOM;
WStacking *st=NULL;
- uint min_level=0;
if(stacking==NULL)
return NULL;
- min_level=stacking_min_level(stacking, include_filt, filt_data);
-
- if(to_try!=NULL && to_try->level>=min_level)
- return to_try;
-
st=stacking;
do{
st=st->prev;
- if(st->level<min_level)
- break;
+ if(st->reg==NULL)
+ continue;
- if(st->reg!=NULL
- && !(st->reg->flags®ION_SKIP_FOCUS)
- && cf(include_filt, filt_data, st)
- && cf(approve_filt, filt_data, st)){
- return st;
+ if(st!=to_try && (st->reg->flags®ION_SKIP_FOCUS ||
+ !cf(include_filt, filt_data, st))){
+ /* skip */
+ continue;
}
+
+ if(st->level<min_level)
+ break; /* no luck */
+
+ if(st==to_try || cf(approve_filt, filt_data, st))
+ return st;
+
+ if(st->level>=STACKING_LEVEL_MODAL1)
+ min_level=maxof(min_level, st->level);
}while(st!=stacking);
return NULL;
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_STACKING_H
#define STACKING_LEVEL_ON_TOP 2
#define STACKING_LEVEL_MODAL1 1024
-
#define STACKING_IS_HIDDEN(ST) ((ST)->hidden)
+#define STACKING_IS_PSEUDOMODAL(ST) ((ST)->pseudomodal)
DECLSTRUCT(WStacking){
/* flags */
uint to_unweave:2;
uint hidden:1;
+ uint pseudomodal:1;
/* WMPlex stuff */
WLListNode *lnode;
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/output.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_STRINGS_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objlist.h>
/*EXTL_DOC
* Change tagging state of \var{reg} as defined by \var{how}
- * (set/unset/toggle). Resulting state is returned.
+ * (one of \codestr{set}, \codestr{unset}, or \codestr{toggle}).
+ * The resulting state is returned.
*/
EXTL_EXPORT_AS(WRegion, set_tagged)
bool region_set_tagged_extl(WRegion *reg, const char *how)
/*EXTL_DOC
- * Returns first tagged object, untagging it as well if \var{untag}is set.
+ * Returns first tagged object, untagging it as well if \var{untag} is set.
*/
EXTL_SAFE
EXTL_EXPORT
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_TAGS_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objp.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_WINDOW_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <ctype.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_XIC_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_IONCORE_XWINDOW_H
Context:
+[Use S if not copy
+Tuomo Valkonen <tuomov@iki.fi>**20070506140705]
+
+[Added extl_table_iter
+Tuomo Valkonen <tuomov@iki.fi>**20070430164248]
+
+[Added ExtlAny
+Tuomo Valkonen <tuomov@iki.fi>**20070430162426]
+
+[Cleanup/reorganisation
+Tuomo Valkonen <tuomov@iki.fi>**20070430144940]
+
+[Don't put functions into documentation index
+Tuomo Valkonen <tuomov@iki.fi>**20070408124504
+ (The function list should suffice.)
+]
+
[Improved mechanisms for unregistration of functions.
Tuomo Valkonen <tuomov@iki.fi>**20070226150118
Makes for a bit smaller memory footprint.
["o"]="object",
["s"]="string",
["S"]="string",
+ ["a"]="any value",
}
-- }}}
fn=info.exported_name
end
+ --[[
if info.class~="global" then
fprintf(h, "\\index{%s@%s!", texfriendly(info.class),
texfriendly_typeormod(info.class));
fprintf(h, "%s@\\code{%s}}\n", texfriendly(fn), fn)
end
fprintf(h, "\\index{%s@\\code{%s}}\n", texfriendly(fn), fn)
+ ]]
if info.class~="global" then
fprintf(h, "\\hyperlabel{fn:%s.%s}", info.class, fn)
/*}}}*/
-/*{{{ Stack get/push -- all unsafe */
+/*{{{ Stack get/push -- all unsafe */
static bool extl_stack_get(lua_State *st, int pos, char type,
if(wasdeadobject!=NULL)
*wasdeadobject=FALSE;
+
+ if(type=='b'){
+ if(valret)
+ *((bool*)valret)=lua_toboolean(st, pos);
+ return TRUE;
+ }
- if(type=='i' || type=='d'){
- if(lua_type(st, pos)!=LUA_TNUMBER)
+ switch(lua_type(st, pos)){
+ case LUA_TNUMBER:
+ if(type!='i' && type!='d' && type!='a')
return FALSE;
-
+
d=lua_tonumber(st, pos);
if(type=='i'){
return FALSE;
if(valret)
*((int*)valret)=d;
+ }else if(type=='a'){
+ if(valret){
+ ((ExtlAny*)valret)->type='d';
+ ((ExtlAny*)valret)->value.d=d;
+ }
}else{
if(valret)
*((double*)valret)=d;
}
return TRUE;
- }
-
- if(type=='b'){
- if(valret)
- *((bool*)valret)=lua_toboolean(st, pos);
- return TRUE;
- }
-
- if(lua_type(st, pos)==LUA_TNIL || lua_type(st, pos)==LUA_TNONE){
- if(type=='t' || type=='f'){
+
+ case LUA_TNIL:
+ case LUA_TNONE:
+ if(type=='a'){
+ if(valret)
+ ((ExtlAny*)valret)->type='v';
+ }else if(type=='t' || type=='f'){
if(valret)
*((int*)valret)=LUA_NOREF;
}else if(type=='s' || type=='S'){
return FALSE;
}
return TRUE;
- }
- if(type=='s' || type=='S'){
- if(lua_type(st, pos)!=LUA_TSTRING)
+ case LUA_TSTRING:
+ if(type!='s' && type!='S' && type!='a')
return FALSE;
if(valret){
str=lua_tostring(st, pos);
if(str==NULL)
return FALSE;
}
- *((const char**)valret)=str;
+ if(type=='a'){
+ ((ExtlAny*)valret)->type=(copystring ? 's' : 'S');
+ ((ExtlAny*)valret)->value.s=str;
+ }else{
+ *((const char**)valret)=str;
+ }
}
return TRUE;
- }
- if(type=='f'){
- if(!lua_isfunction(st, pos))
+ case LUA_TFUNCTION:
+ if(type!='f' && type!='a')
return FALSE;
if(valret){
lua_pushvalue(st, pos);
- *((int*)valret)=lua_ref(st, 1);
+ if(type=='a'){
+ ((ExtlAny*)valret)->type='f';
+ ((ExtlAny*)valret)->value.f=lua_ref(st, 1);
+ }else{
+ *((int*)valret)=lua_ref(st, 1);
+ }
}
return TRUE;
- }
-
- if(type=='t'){
- if(!lua_istable(st, pos))
+
+ case LUA_TTABLE:
+ if(type!='t' && type!='a')
return FALSE;
if(valret){
lua_pushvalue(st, pos);
- *((int*)valret)=lua_ref(st, 1);
+ if(type=='a'){
+ ((ExtlAny*)valret)->type='t';
+ ((ExtlAny*)valret)->value.f=lua_ref(st, 1);
+ }else{
+ *((int*)valret)=lua_ref(st, 1);
+ }
}
return TRUE;
- }
-
- if(type=='o'){
- bool invalid=FALSE, dead=FALSE;
- Obj *obj=extl_get_obj(st, pos, &invalid, &dead);
- if(wasdeadobject!=NULL)
- *wasdeadobject=dead;
- if(valret){
- *((Obj**)valret)=obj;
- D(fprintf(stderr, "Got obj %p, ", obj);
- fprintf(stderr, "%s\n", OBJ_TYPESTR(obj)));
+
+ case LUA_TUSERDATA:
+ if(type=='o'|| type=='a'){
+ bool invalid=FALSE, dead=FALSE;
+ Obj *obj=extl_get_obj(st, pos, &invalid, &dead);
+ if(wasdeadobject!=NULL)
+ *wasdeadobject=dead;
+ if(valret){
+ if(type=='a'){
+ ((ExtlAny*)valret)->type='o';
+ ((ExtlAny*)valret)->value.o=obj;
+ }else{
+ *((Obj**)valret)=obj;
+ }
+ }
+ return !invalid;
}
- return !invalid;
}
return FALSE;
}
-static void extl_stack_push(lua_State *st, char spec, void *ptr)
+static void extl_to_any(ExtlAny *a, char type, void *ptr)
{
- if(spec=='i'){
- lua_pushnumber(st, *(int*)ptr);
- }else if(spec=='d'){
- lua_pushnumber(st, *(double*)ptr);
- }else if(spec=='b'){
- lua_pushboolean(st, *(bool*)ptr);
- }else if(spec=='o'){
- extl_push_obj(st, *(Obj**)ptr);
- }else if(spec=='s' || spec=='S'){
- lua_pushstring(st, *(char**)ptr);
- }else if(spec=='t' || spec=='f'){
- lua_rawgeti(st, LUA_REGISTRYINDEX, *(int*)ptr);
- }else{
- lua_pushnil(st);
+ if(type=='a'){
+ *a=*(ExtlAny*)ptr;
+ return;
+ }
+
+ a->type=type;
+
+ switch(type){
+ case 'i': a->value.i=*(int*)ptr; break;
+ case 'd': a->value.d=*(double*)ptr; break;
+ case 'b': a->value.b=*(bool*)ptr; break;
+ case 'o': a->value.o=*(Obj**)ptr; break;
+ case 's':
+ case 'S': a->value.s=*(char**)ptr; break;
+ case 't': a->value.t=*(ExtlTab*)ptr; break;
+ case 'f': a->value.f=*(ExtlFn*)ptr; break;
}
}
-static bool extl_stack_push_vararg(lua_State *st, char spec, va_list *argsp)
+static void extl_to_any_vararg(ExtlAny *a, char type, va_list *argsp)
{
- switch(spec){
- case 'i':
- lua_pushnumber(st, (double)va_arg(*argsp, int));
- break;
- case 'd':
- lua_pushnumber(st, va_arg(*argsp, double));
- break;
- case 'b':
- lua_pushboolean(st, va_arg(*argsp, bool));
- break;
- case 'o':
- extl_push_obj(st, va_arg(*argsp, Obj*));
- break;
- case 'S':
- case 's':
- lua_pushstring(st, va_arg(*argsp, char*));
- break;
- case 'f':
- case 't':
- lua_rawgeti(st, LUA_REGISTRYINDEX, va_arg(*argsp, int));
- break;
- default:
- return FALSE;
+ if(type=='a'){
+ *a=va_arg(*argsp, ExtlAny);
+ return;
}
+ a->type=type;
+
+ switch(type){
+ case 'i': a->value.i=va_arg(*argsp, int); break;
+ case 'd': a->value.d=va_arg(*argsp, double); break;
+ case 'b': a->value.b=va_arg(*argsp, bool); break;
+ case 'o': a->value.o=va_arg(*argsp, Obj*); break;
+ case 's':
+ case 'S': a->value.s=va_arg(*argsp, char*); break;
+ case 't': a->value.t=va_arg(*argsp, ExtlTab); break;
+ case 'f': a->value.f=va_arg(*argsp, ExtlFn); break;
+ }
+}
+
+
+static void extl_stack_pusha(lua_State *st, ExtlAny *a)
+{
+ switch(a->type){
+ case 'i': lua_pushnumber(st, a->value.i); break;
+ case 'd': lua_pushnumber(st, a->value.d); break;
+ case 'b': lua_pushboolean(st, a->value.b); break;
+ case 'o': extl_push_obj(st, a->value.o); break;
+ case 's':
+ case 'S': lua_pushstring(st, a->value.s); break;
+ case 't': lua_rawgeti(st, LUA_REGISTRYINDEX, a->value.t); break;
+ case 'f': lua_rawgeti(st, LUA_REGISTRYINDEX, a->value.f); break;
+ default: lua_pushnil(st);
+ }
+}
+
+
+static void extl_stack_push(lua_State *st, char spec, void *ptr)
+{
+ ExtlAny a;
+
+ extl_to_any(&a, spec, ptr);
+ extl_stack_pusha(st, &a);
+}
+
+
+static bool extl_stack_push_vararg(lua_State *st, char spec, va_list *argsp)
+{
+ ExtlAny a;
+
+ extl_to_any_vararg(&a, spec, argsp);
+ extl_stack_pusha(st, &a);
+
return TRUE;
}
enum{STRINGS_NONE, STRINGS_NONCONST, STRINGS_ALL};
-static void extl_free(void *ptr, char spec, int strings)
+static void extl_any_free(ExtlAny *a, int strings)
{
- if(((spec=='s' && strings!=STRINGS_NONE) ||
- (spec=='S' && strings==STRINGS_ALL)) && *(char**)ptr!=NULL){
- if(*(char**)ptr!=NULL)
- free(*(char**)ptr);
- *(char**)ptr=NULL;
- }else if(spec=='t'){
- extl_unref_table(*(ExtlTab*)ptr);
- }else if(spec=='f'){
- extl_unref_fn(*(ExtlFn*)ptr);
+ if((a->type=='s' && strings!=STRINGS_NONE) ||
+ (a->type=='S' && strings==STRINGS_ALL)){
+ if(a->value.s!=NULL)
+ free((char*)a->value.s);
+ }else if(a->type=='t'){
+ extl_unref_table(a->value.t);
+ }else if(a->type=='f'){
+ extl_unref_fn(a->value.f);
}
}
+static void extl_free(void *ptr, char spec, int strings)
+{
+ ExtlAny a;
+
+ extl_to_any(&a, spec, ptr);
+ extl_any_free(&a, strings);
+}
+
+
/*}}}*/
return extl_table_get(ref, 's', type, entry, valret);
}
+bool extl_table_gets_a(ExtlTab ref, const char *entry, ExtlAny *ret)
+{
+ return extl_table_do_gets(ref, entry, 'a', (void*)ret);
+}
+
bool extl_table_gets_o(ExtlTab ref, const char *entry, Obj **ret)
{
return extl_table_do_gets(ref, entry, 'o', (void*)ret);
return extl_table_get(ref, 'i', type, entry, valret);
}
+bool extl_table_geti_a(ExtlTab ref, int entry, ExtlAny *ret)
+{
+ return extl_table_do_geti(ref, entry, 'a', (void*)ret);
+}
+
bool extl_table_geti_o(ExtlTab ref, int entry, Obj **ret)
{
return extl_table_do_geti(ref, entry, 'o', (void*)ret);
return retval;
}
+bool extl_table_sets_a(ExtlTab ref, const char *entry, const ExtlAny *val)
+{
+ return extl_table_set(ref, 's', 'a', entry, val);
+}
bool extl_table_sets_o(ExtlTab ref, const char *entry, Obj *val)
{
}
+bool extl_table_seti_a(ExtlTab ref, int entry, const ExtlAny *val)
+{
+ return extl_table_set(ref, 'i', 'a', entry, val);
+}
+
bool extl_table_seti_o(ExtlTab ref, int entry, Obj *val)
{
return extl_table_set(ref, 'i', 'o', entry, val);
+/*}}}*/
+
+
+/*{{{ Table iteration */
+
+
+typedef struct{
+ ExtlTab ref;
+ ExtlIterFn *fn;
+ void *d;
+} IterP;
+
+
+int extl_table_iter_do(lua_State *st, IterP *par)
+{
+ lua_rawgeti(st, LUA_REGISTRYINDEX, par->ref);
+
+ lua_pushnil(st);
+
+ while(lua_next(st, -2)!=0){
+ ExtlAny k, v;
+
+ if(extl_stack_get(st, -2, 'a', FALSE, NULL, &k)){
+ bool ret=TRUE;
+ if(extl_stack_get(st, -1, 'a', FALSE, NULL, &v)){
+ ret=par->fn(k, v, par->d);
+ extl_any_free(&v, STRINGS_NONE);
+ }
+ extl_any_free(&k, STRINGS_NONE);
+ if(!ret)
+ return 0;
+ }
+
+ lua_pop(st, 1);
+ }
+
+ return 0;
+}
+
+
+void extl_table_iter(ExtlTab ref, ExtlIterFn *fn, void *d)
+{
+ IterP par;
+
+ par.ref=ref;
+ par.fn=fn;
+ par.d=d;
+
+ extl_cpcall(l_st, (ExtlCPCallFn*)extl_table_iter_do, &par);
+}
+
+
/*}}}*/
* t: table
* f: function (c or lua)
* v: void
+ * a: ExtlAny
*/
typedef int ExtlTab;
ExtlTab t;
} ExtlL2Param;
+typedef struct{
+ char type;
+ ExtlL2Param value;
+} ExtlAny;
+
typedef bool ExtlL2CallHandler(void (*fn)(), ExtlL2Param *in,
ExtlL2Param *out);
va_list *args);
extern bool extl_table_get(ExtlTab ref, char itype, char type, ...);
+extern bool extl_table_gets_a(ExtlTab ref, const char *entry, ExtlAny *ret);
extern bool extl_table_gets_o(ExtlTab ref, const char *entry, Obj **ret);
extern bool extl_table_gets_i(ExtlTab ref, const char *entry, int *ret);
extern bool extl_table_gets_d(ExtlTab ref, const char *entry, double *ret);
extern bool extl_table_gets_t(ExtlTab ref, const char *entry, ExtlTab *ret);
extern int extl_table_get_n(ExtlTab ref);
+extern bool extl_table_geti_a(ExtlTab ref, int entry, ExtlAny *ret);
extern bool extl_table_geti_o(ExtlTab ref, int entry, Obj **ret);
extern bool extl_table_geti_i(ExtlTab ref, int entry, int *ret);
extern bool extl_table_geti_d(ExtlTab ref, int entry, double *ret);
va_list *args);
extern bool extl_table_set(ExtlTab ref, char itype, char type, ...);
+extern bool extl_table_sets_a(ExtlTab ref, const char *entry, const ExtlAny *ret);
extern bool extl_table_sets_o(ExtlTab ref, const char *entry, Obj *val);
extern bool extl_table_sets_i(ExtlTab ref, const char *entry, int val);
extern bool extl_table_sets_d(ExtlTab ref, const char *entry, double val);
extern bool extl_table_sets_f(ExtlTab ref, const char *entry, ExtlFn val);
extern bool extl_table_sets_t(ExtlTab ref, const char *entry, ExtlTab val);
+extern bool extl_table_seti_a(ExtlTab ref, int entry, const ExtlAny *ret);
extern bool extl_table_seti_o(ExtlTab ref, int entry, Obj *val);
extern bool extl_table_seti_i(ExtlTab ref, int entry, int val);
extern bool extl_table_seti_d(ExtlTab ref, int entry, double val);
extern bool extl_table_clears(ExtlTab ref, const char *entry);
extern bool extl_table_cleari(ExtlTab ref, int entry);
+/* Table/iterate */
+
+typedef bool ExtlIterFn(ExtlAny k, ExtlAny v, void *d);
+
+extern void extl_table_iter(ExtlTab ref, ExtlIterFn *fn, void *d);
+
/* Call */
extern void extl_protect(ExtlSafelist *sl);
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
/* This file contains routines for deferred execution of potentially
d->action=action;
d->list=list;
d->fn=extl_fn_none();
-
+ watch_init(&(d->watch));
+
if(obj!=NULL)
watch_setup(&(d->watch), obj, defer_watch_handler);
d->action=NULL;
d->list=list;
d->fn=extl_ref_fn(fn);
-
watch_init(&(d->watch));
LINK_ITEM(*list, d, next, prev);
free_defer(d);
if(a!=NULL){
- if(obj!=NULL)
- a(obj);
+ /* The deferral should not be on the list, if there
+ * was an object, and it got destroyed.
+ */
+ /*if(obj!=NULL)*/
+ a(obj);
}else if(fn!=extl_fn_none()){
extl_call(fn, NULL, NULL);
extl_unref_fn(fn);
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_LIBMAINLOOP_DEFER_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <limits.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_LIBMAINLOOP_EXEC_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/types.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_LIBMAINLOOP_HOOKS_H
MAINLOOP_SOURCES = $(patsubst %,$(MAINLOOP_DIR)/%, $(MAINLOOP_SOURCES_))
+MKEXPORTS_EXTRA_DEPS += $(MAINLOOP_SOURCES)
MKEXPORTS_EXTRAS += -reexport mainloop $(MAINLOOP_SOURCES)
*
* Partly based on a contributed code.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/types.h>
*
* Based on a contributed readfds code.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_LIBMAINLOOP_SELECT_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <unistd.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_LIBMAINLOOP_SIGNAL_H
Context:
+[Some list code improvements
+Tuomo Valkonen <tuomov@iki.fi>**20070506140559]
+
+[Oops, fixed comparison function order.
+Tuomo Valkonen <tuomov@iki.fi>**20070424170047]
+
[Renamed `prog_execname` `libtu_progname` and added `libtu_progbasename`.
Tuomo Valkonen <tuomov@iki.fi>**20070310230536]
}
+bool objlist_contains(ObjList *objlist, Obj *obj)
+{
+ return (objlist_find_node(objlist, obj)!=NULL);
+}
+
+
bool objlist_insert_last(ObjList **objlist, Obj *obj)
{
ObjList *node=reuse(objlist);
node=objlist_find_node(*objlist, obj);
if(node==NULL)
- return FALSE;
+ return objlist_insert_last(objlist, obj);
UNLINK_ITEM(*objlist, node, next, prev);
LINK_ITEM_LAST(*objlist, node, next, prev);
node=objlist_find_node(*objlist, obj);
if(node==NULL)
- return FALSE;
+ return objlist_insert_first(objlist, obj);
UNLINK_ITEM(*objlist, node, next, prev);
LINK_ITEM_FIRST(*objlist, node, next, prev);
extern bool objlist_reinsert_last(ObjList **objlist, Obj *obj);
extern bool objlist_reinsert_first(ObjList **objlist, Obj *obj);
extern bool objlist_remove(ObjList **objlist, Obj *obj);
+extern bool objlist_contains(ObjList *objlist, Obj *obj);
extern void objlist_clear(ObjList **objlist);
extern void objlist_iter_init(ObjListIterTmp *state, ObjList *objlist);
extern Obj *objlist_iter(ObjListIterTmp *state);
}
+bool ptrlist_contains(PtrList *ptrlist, void *ptr)
+{
+ return (ptrlist_find_node(ptrlist, ptr)!=NULL);
+}
+
+
bool ptrlist_insert_last(PtrList **ptrlist, void *ptr)
{
PtrList *node=mknode(ptr);
PtrList *node=ptrlist_find_node(*ptrlist, ptr);
if(node==NULL)
- return FALSE;
+ return ptrlist_insert_last(ptrlist, ptr);
UNLINK_ITEM(*ptrlist, node, next, prev);
LINK_ITEM_LAST(*ptrlist, node, next, prev);
PtrList *node=ptrlist_find_node(*ptrlist, ptr);
if(node==NULL)
- return FALSE;
+ return ptrlist_insert_first(ptrlist, ptr);
UNLINK_ITEM(*ptrlist, node, next, prev);
LINK_ITEM_FIRST(*ptrlist, node, next, prev);
extern bool ptrlist_reinsert_last(PtrList **ptrlist, void *ptr);
extern bool ptrlist_reinsert_first(PtrList **ptrlist, void *ptr);
extern bool ptrlist_remove(PtrList **ptrlist, void *ptr);
+extern bool ptrlist_contains(PtrList *ptrlist, void *ptr);
extern void ptrlist_clear(PtrList **ptrlist);
extern void ptrlist_iter_init(PtrListIterTmp *state, PtrList *ptrlist);
extern void *ptrlist_iter(PtrListIterTmp *state);
return (res!=0
? res
- : (nodekey[d->len]=='\0' ? 0 : 1));
+ : (nodekey[d->len]=='\0' ? 0 : -1));
}
######################################
-TRANSLATIONS=fi cs de
+TRANSLATIONS=fi cs
WELCOME_TARGETS=\
welcome.txt \
# TODO: PWM configuration file is undocumented
PWM_CONFIGS=\
../etc/cfg_ioncore.lua \
- ../etc/cfg_menu.lua
+ ../etc/cfg_menu.lua \
+ ../pwm/cfg_pwm.lua
######################################
.SH "POPIS"
Ion je dla¾dicový správce oken se zálo¾kami navr¾ený pro klávesnicové u¾ivatele.
-
+
.SH "VOLBY"
.TP
.B \-display poèítaè:displej.obrazovka
Zobrazí verzi
.TP
.B \-about
-Zobrazí informace o programu (verze, copyright)
+Zobrazí informace o programu (verze, autor, copyright)
.SH Základní pojetí
Tato sekce pøiná¹í pøehled typù objektù, které se objevují na X displeji
-spravovaném Ionem. To je nezbytné pro pochopení operací s objekty a pro
+spravovaném Ionem. To je nezbytné pro pochopení operací s objekty a pro
pochopení, proè jsou rùzná klávesová pøiøazení dostupná jen u nìkterých
objektù. Podrobnìj¹í popis nutný pro psaní vlastních pøizpùsobení naleznete
na webových stránkách Ionu.
BINDINGS:WScreen
-.SS Pøiøazení pro práci s nejvy¹¹ími rámy a obrazovkami a jejich potomky
-
-BINDINGS:WMPlex.toplevel
-
-.SS Pøiøazení pro práci s rámy a obrazovkami a jejich potomky
+.SS Pøiøazení pro práci s rámy a obrazovkami
BINDINGS:WMPlex
-.SS Pøiøazení pro práci se v¹emi rámy (vèetnì doèasných) a jejich potomky
+.SS Pøiøazení pro práci se v¹emi rámy
BINDINGS:WFrame
-.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými) a jejich potomky
+.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými) a obrazovkami
+
+BINDINGS:WMPlex.toplevel
+
+.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými)
BINDINGS:WFrame.toplevel
BINDINGS:WTiling
.\" BINDINGS:WFrame.tiled
-.SS Pøiøazení pro kientská okna
+.SS Pøiøazení pro klientská okna
BINDINGS:WClientWin
-
-BINDINGS:WGroupWS
+BINDINGS:WGroupCW
.SS Pøiøazení pro pøesun/zmìnu velikosti
+++ /dev/null
-.TH ION 1
-.SH NAME
-Ion - ein X11 Fenster Manager
-.SH ÜBERSICHT
-.B ion3
-.I "[optionen]"
-.SH "BESCHREIBUNG"
-
-Ion ist ein tabellarisch aufgebauter Fenster Manager, entwickelt für
-Benutzer welche auf die Tastatur spezialisiert sind.
-
-.SH "OPTIONEN"
-.TP
-.B \-display host:display.screen
-X Anzeige zum darstellen
-.TP
-.B \-conffile Konfigurationsdatei
-Konfigurationsdatei welche anstelle der Vorgegebenen benutzt werden soll
-.TP
-.B \-searchdir Verzeichnis
-Verzeichnis worin die Konfigurationsdateien und andere Scripte gesucht werden
-.TP
-.B \-oneroot
-Auf X Servern mit mehreren (traditionell non-Xinerama) Screens; handhabt nur den
-voreingestellten Screen (Wurzelfenster); nicht alle, welche durch die '-display'
-Option oder in der DISPLAY Umgebungsvariable bereitgestellt werden
-.TP
-.B \-session sitzungs_name
-Setzt einen Sitzungsnamen. Diese Option beeinflusst wo der Arbeitsbereich und
-andere Sicherungsdateien abgelegt werden (~/.ion3/sitzungs_name wenn die Option
-gesetzt wurde).
-.TP
-.B \-help
-Zeigt die Hilfe für die Kommandozeilenoptionen
-.TP
-.B \-version
-Zeigt die Version
-.TP
-.B \-about
-Zeigt Informationen über den Autor, die Version und das Copyright
-
-.SH BASIS KONZEPTE
-
-Diese Kapitel ist ein Überblick über die Objekttypen welche auf der X Anzeige
-durch Ion behandelt werden. Die Beziehungen sind auf die Standardeinstellungen
-ausgerichtet. Diese Informationen hier sind nötig um die Operationen und
-Möglichkeiten der unterschiedlichen Tastenkombinationen zu verstehen. Siehe
-dazu auch die weiteren Erklärungen unten. Für detailliertere Erklärungen,
-welche zum schreiben eigener Konfigurationsdateien benötigt werden, siehe die
-zusätzlichen Dokumentationen auf der Ion Webseite
-
-Die obersten Objekte welche benutzt werden können sind \fBScreens\fP.
-Sie sind mit physikalischen Sceeens zu vergleichen. Screens enthalten
-\fBArbeitsbereiche\fP und \fBClient Fenster\fP gepackt in einem Vollbildmodus.
-Diese Objekte sind \fBgebündelt\fP, mit dem Hintergrund, dass nur einer auf
-einmal angezeigt werden kann.
-
-Derzeit unterstützt Ion zwei Arten von Arbeitsbereichen; \fBgeteilt\fP in den
-traditionellen Ion-Style und den herkömlichen \fBfliessenden\fP Arbeitsbereich
-des PWM. Arbeitsbereiche sind keine sichtbaren Objekte sondern eher eine
-Sammlung von gleichzeitig erkennbaren \fBFrames\fP.
-
-Ähnlich wie Screens, bündeln Frames andere Objekte, in diesem Fall sind dies
-meist Client Fenster. Die meiste Zeit, sind Frames das einzige von Ion was auf
-dem Screen zu sehen ist. Frames können Rahmen haben und sie haben einen
-\fBReiter\fP für jedes in ihnen gebündelte Objekt.
-
-\fBAnfragen\fP sind Textboxen die am unteren Rand eines Frames oder Screens
-erscheinen. Sie können nach Texteingaben zum ausführen einer Aktion verlangen.
-Diese sind abhängig von den an sie gebundenen Aktionen. Die meisten Anfragen
-unterstützen Autovervollständigung.
-
-.SH BINDUNGEN
-
-Hier sind die voreingestellten Tasten- und Mauszeigerbindungen beschrieben.
-(\fBMod1\fP) hängt vom jeweiligen verwendeten System ab. Auf PC's mit XFree86
-ist es höchstwahrscheinlich an die linke 'ALT-Taste' gebungen (\fBALT_L\fP).
-Auf SUN Systemen ist es sicherlich an die 'Diamant' Tasten gebunden
-(\fBMETA_L\fP, \fBMETA_R\fP). Benutze \fIxmodmap(1x)\fP um die Belegung
-herauszufinden.
-
-Die Zeichenkette in den eckigen Klammern nach einer Bindungsgruppe (wird unten
-gezeigt) deutet auf die Konfigurationsdatei des Modules in welchem die Bindungen
-definiert sind.
-
-.SS Global verfügbare Bindungen
-
-BINDINGS:WScreen
-
-.".SS Bindungsoperationen auf Frames und Screens und ihren Kindern
-
-BINDINGS:WMPlex
-
-.SS Bindungsoperationen auf Frames und ihren Kindern
-
-BINDINGS:WFrame
-
-.SS Bindungen zum Bewegungs-/Veränderungsmodus
-
-BINDINGS:WMoveresMode
-
-.SS Bindungen zum teilen der Arbeitsfläche [mod_ionws]
-
-BINDINGS:WTiling
-.\" BINDINGS:WFrame.tiled
-
-.SS Bindungen für den fliessenden Arbeitsbereich und Frames [mod_floatws]
-
-BINDINGS:WGroupWS
-
-BINDINGS:WFrame.floating
-
-.SS Bindungen für Message- und Anfrageboxen [mod_query]
-
-BINDINGS:WInput
-
-.SS Bindungen zum Editieren in Anfragen [mod_query]
-
-Diese Bindungen sind vergleichbar mit denen des \fIjoe(1)\fP Texteditors.
-Auschneiden, Kopieren und Einfügen arbeiten nach konventionellen
-Gesichtspunkten. Etwas überarbeitet aber die gleichen Tasten.
-
-BINDINGS:WEdln
-
-.SS Bindungen für die Menüs [mod_menu]
-
-BINDINGS:WMenu
-
-
-.SH DATEIEN und VERZEICHNISSE
-.TP
-.B ETCDIR/cfg_ion.lua
-Voreingestellte Hauptkonfigurationsdateien
-.TP
-.B ETCDIR/cfg_*.lua
-Andere Konfigurationsdateien
-.TP
-.B ETCDIR/look_*.lua
-Farbschemata Konfigurationsdateien
-.TP
-.B ~/.ion3/
-Benutzerkonfigurationsdateien
-.TP
-.B ~/.ion3/cfg_ion.lua
-Voreingestellte Benutzer Hauptkonfigurationsdateien (überschreiben die
-systemweiten Konfigurationen)
-
-.SH SIEHE AUCH
-Die Ion Homepage, \fIhttp://iki.fi/tuomov/ion/\fP
-.PP
-Das Dokument "Ion: Configuring and extending with Lua" kann auf der Ion Webseite
-gefunden werden.
-
-.PP
-.I DOCDIR/
-.PP
-\fIX(7x)\fP, \fIpwm3(1)\fP, \fIjoe(1)\fP
-
-.SH AUTOR
-Ion wurde von Tuomo Valkonen <tuomov at iki.fi> geschrieben
Näytä Ionin versio.
.TP
.B \-about
-Näytä tietoja Ionista (versio, tekijänoikeudet).
+Näytä tietoja Ionista (versio, tekijä, lisenssi).
.SH PERUSKÄSITTEET
-Tämä kappale on katsaus erilaisiin niin kutsuttuihin \fBolioihin\fP,
+Tämä kappale on katsaus erilaisiin niin kutsuttuihin \fBkappaleisiin\fP,
joita ilmenee Ionin hallitsemalla X-näytöllä, ja niiden suhteisiin
tavallisessa kokoonpanossa. Sinun tarvitse ymmärtää nämä suhteet
tietääksesi milloin mitkäkin alempana kuvattavat näppäinsidonnat
tehdäksesi omat asetustiedostot, katso Ionin seittisivulta saatavaa
yksityiskohtaisempaa dokumentaatiota.
-Ylimmän tason olioita, joilla on merkitystä tässä yhteydessä,
+Ylimmän tason kappaleista, joilla on merkitystä tässä yhteydessä,
kutsutaan \fBnäytöiksi\fP. Ne vastaavat fyysisiä näyttöjä. Näytöt
sisältävät \fBtyöpöytiä\fP (jotka ovat itse eräänlaisia \fBryhmiä\fP)
-ja kokoruudun tilassa olevia \fBasiakasikkunoita\fP. Nämä oliot ovat
+ja kokoruudun tilassa olevia \fBasiakasikkunoita\fP. Nämä kappaleet ovat
\fBlomitettu\fP siten, että vain yksi voi näkyä kerrallaan.
Työpöydät voivat vuorostaan sisältää \fBlaatoituksia\fP sekä
kelluvia/irroitettuja \fBkehyksiä\fP. Laatoitukset taasen sisältävät
\fBkehyksiä\fP laatoitettuna täyttämään koko näytön, sekä mahdollisesti
tilapalkin tai telakan (dock). Näyttöjen tapaan kehykset lomittavat
-muita olioita, mutta tässä tapauksessa lähinnä asiakasikkuna\fBryhmiä\fP.
+muita kappaleita, mutta tässä tapauksessa lähinnä asiakasikkuna\fBryhmiä\fP.
Kehykset ovat suurimman osan ajasta ainut asia, minkä näet Ionista. Niillä
voi olla reunakoristukset, ja lisäksi kehyksissä on \fBvälilehti\fP
-jokaiselle lomitetulle oliolle.
+jokaiselle lomitetulle kappaleelle.
\fBKyselyt\fP ovat näyttöjen tai kehysten alaosiin imestyviä laatikoita,
jotka odottavat sinulta tekstin syöttöä jonkin siitä riippuvan toiminnon
BINDINGS:WScreen
-.SS Näytöillä tai ylimmän tason kehyksissä toimivat sidonnat
-
-BINDINGS:WMPlex.toplevel
-
-.SS Näytöillä tai (kaikissa) kehyksissä toimivat sidonnat
+.SS Näytöillä ja kaikissa kehyksissä toimivat sidonnat
BINDINGS:WMPlex
BINDINGS:WFrame
-.SS Ylimmän tason kehyksissä (ei ns. transient-dialogi) toimivat sidonnat
+.SS Näytöillä ja ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat
+
+BINDINGS:WMPlex.toplevel
+
+.SS Ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat
BINDINGS:WFrame.toplevel
.SS Asiakasikkunoiden sidonnat
BINDINGS:WClientWin
-
BINDINGS:WGroupCW
.SS Siirto- ja koonmuutostilan sidonnat
Show version
.TP
.B \-about
-Show about text (version, copyright)
+Show about text (version, author, license)
.SH BASIC CONCEPTS
BINDINGS:WScreen
-.SS Bindings operating on top-level frames and screens and their children
-
-BINDINGS:WMPlex.toplevel
-
-.SS Bindings operating on frames and screens and their children
+.SS Bindings operating on all frames and screens
BINDINGS:WMPlex
-.SS Bindings operating on all frames (including transient) and their children
+.SS Bindings operating on all frames
BINDINGS:WFrame
-.SS Bindings operating on top-level (non-transient) frames and their children
+.SS Bindings operating on top-level (non-transient) frames and screens
+
+BINDINGS:WMPlex.toplevel
+
+.SS Bindings operating on top-level (non-transient) frames
BINDINGS:WFrame.toplevel
.SS Bindings for client windows
BINDINGS:WClientWin
-
BINDINGS:WGroupCW
.SS Move/resize mode bindings
Zobrazí verzi
.TP
.B \-about
-Zobrazí informace o programu (verze, copyright)
+Zobrazí informace o programu (verze, autor, copyright)
.SH PØIØAZENÍ
-Toto jsou implicitní pøiøazení klávesových zkratek. Pøiøazení modifikátoru
+Toto jsou výchozí pøiøazení klávesových zkratek. Pøiøazení modifikátoru
(\fBMod1\fP) závisí na systému. Na PCèkách s XFree86 bude nejspí¹ navázán
na levou klávesu Alt (\fBAlt_L\fP). Na Sunech je obvykle namapován na klávesy
s diamanty (\fBMeta_L\fP, \fBMeta_R\fP). Konkrétní pøiøazení zjistíte
-programem \fIxmodmap(1x)\fP.
+programem \fIxmodmap(1)\fP.
Øetìzec v hranatých závorkách urèuje modul, jeho¾ konfiguraèní soubor
definuje toto pøiøazení.
BINDINGS:WScreen
-.".SS Pøiøazení pro práci s rámy, obrazovkami a jejich potomky
+.SS Pøiøazení pro práci s rámy, obrazovkami a jejich potomky
BINDINGS:WMPlex
.SS Pøiøazení pro práci s rámy a jejich potomky
BINDINGS:WFrame
+BINDINGS:WFrame.floating
-.SS Pøiøazení pro pøesun/zmìnu velikosti
+.SS Pøiøazení pro práci s nejvy¹¹ími (ne s doèasnými) rámy a obrazovkami
-BINDINGS:WMoveresMode
+BINDINGS:WMPlex.toplevel
-.SS Pøiøazení pro plovoucí pracovní plochy [mod_floatws]
+.SS Pøiøazení pro práci s nejvy¹¹ími (ne s doèasnými) rámy
-BINDINGS:WGroupWS
+BINDINGS:WFrame.toplevel
-BINDINGS:WFrame.floating
+.SS Pøiøazení pro práci s klientskými okny
+
+BINDINGS:WClientWin
+BINDINGS:WGroupCW
+
+.SS Pøiøazení pro pøesun/zmìnu velikosti
+
+BINDINGS:WMoveresMode
.SS Pøiøazení pro menu [mod_menu]
+++ /dev/null
-.TH PWM 1
-.SH NAME
-PWM - ein X11 Fenster Manager
-.SH ÜBERSICHT
-.B pwm3
-.I "[optionen]"
-.SH "BESCHREIBUNG"
-
-Der originale PWM war der erste Fenster Manager, welcher einen tabellenartigen
-Aufbau seiner Objekte unterstützte. Diese Version des PWM basiert auf dem
-Quellcode von Ion und unterscheidet sich zu diesem nur durch Unterschiede in den
-Konfigurationsdateien, den Pfaden und einigen wenigen zusätzliche Optionen.
-
-.SH "OPTIONEN"
-.TP
-.B \-display host:display.screen
-X Anzeige zum darstellen
-.TP
-.B \-conffile Konfigurationsdatei
-Konfigurationsdatei welche anstelle der Vorgegebenen benutzt werden soll
-.TP
-.B \-searchdir dir
-Verzeichnis worin die Konfigurationsdateien und andere Scripte gesucht werden
-.TP
-.B \-oneroot
-Auf X Servern mit mehreren (traditionell non-Xinerama) Screens; handhabt nur den
-voreingestellten Screen (Wurzelfenster); nicht alle, welche durch die '-display'
-Option oder in der DISPLAY Umgebungsvariable bereitgestellt werden
-.TP
-.B \-sessionname sitzungs_name
-Setzt einen Sitzungsnamen. Diese Option beeinflusst wo der Arbeitsbereich und
-andere Sicherungsdateien abgelegt werden (~/.pwm3/sitzungs_name wenn die Option
-gesetzt wurde).
-.TP
-.B \-help
-Zeigt die Hilfe für die Kommandozeilenoptionen
-.TP
-.B \-version
-Zeigt die Version
-.TP
-.B \-about
-Zeigt Informationen über den Autor, die Version und das Copyright
-
-.SH BINDUNGEN
-Hier sind die voreingestellten Tasten- und Mauszeigerbindungen beschrieben.
-(\fBMod1\fP) hängt vom jeweiligen verwendeten System ab. Auf PC's mit XFree86
-ist es höchstwahrscheinlich an die linke 'ALT-Taste' gebungen (\fBALT_L\fP).
-Auf SUN Systemen ist es sicherlich an die 'Diamant' Tasten gebunden
-(\fBMETA_L\fP, \fBMETA_R\fP). Benutze \fIxmodmap(1x)\fP um die Belegung
-herauszufinden.
-
-Die Zeichenkette in den eckigen Klammern nach einer Bindungsgruppe (wird unten
-gezeigt) deutet auf die Konfigurationsdatei des Modules in welchem die Bindungen
-definiert sind.
-
-.SS Global verfügbare Bindungen
-
-BINDINGS:WScreen
-
-.".SS Bindungsoperationen auf Frames und Screens und ihren Kindern
-
-BINDINGS:WMPlex
-
-.SS Bindungsoperationen auf Frames und ihren Kindern
-
-BINDINGS:WFrame
-
-.SS Bindungen zum Bewegungs-/Veränderungsmodus
-
-BINDINGS:WMoveresMode
-
-.SS Bindungen für den fliessenden Arbeitsbereich und Frames [mod_floatws]
-
-BINDINGS:WGroupWS
-
-BINDINGS:WFrame.floating
-
-.SS Bindungen für die Menüs [mod_menu]
-
-BINDINGS:WMenu
-
-
-.SH DATEIEN und VERZEICHNISSE
-.TP
-.B ETCDIR/cfg_pwm.lua
-Voreingestellte Hauptkonfigurationsdateien
-.TP
-.B ETCDIR/cfg_*.lua
-Andere Konfigurationsdateien
-.TP
-.B ETCDIR/look_*.lua
-Farbschemata Konfigurationsdateien
-.TP
-.B ~/.pwm3/
-Benutzerkonfigurationsdateien
-.TP
-.B ~/.pwm3/cfg_pwm.lua
-Voreingestellte Benutzer Hauptkonfigurationsdateien (überschreiben die
-systemweiten Konfigurationen)
-
-.SH SIEHE AUCH
-
-Weitere Informationen siehe \fIion3(1)\fP.
-
-.SH AUTOR
-PWM und Ion wurde von Tuomo Valkonen <tuomov at iki.fi> geschrieben
Näytä Ionin versio.
.TP
.B \-about
-Näytä tietoja PWM:sta (versio, tekijänoikeudet).
+Näytä tietoja PWM:sta (versio, tekijä, lisenssi).
.SH SIDONNAT
BINDINGS:WScreen
-.\".SS Kehyksiä ja näyttöjä, sekä niiden lapsia käsittelevät sidonnat
+.SS Näytöillä ja kaikissa kehyksissä toimivat sidonnat
BINDINGS:WMPlex
-.SS Kehyksiä, sekä niiden lapsia käsittelevät sidonnat
+.SS Kaikissa kehyksissä toimivat sidonnat
BINDINGS:WFrame
+BINDINGS:WFrame.floating
-.SS Siirto ja koonmuutostilan sidonnat
+.SS Näytöillä ja ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat
-BINDINGS:WMoveresMode
+BINDINGS:WMPlex.toplevel
-.SS Kelluvien työpöytien ja kehyksien sidonnat [mod_floatws]
+.SS Ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat
-BINDINGS:WGroupWS
+BINDINGS:WFrame.toplevel
-BINDINGS:WFrame.floating
+.SS Asiakasikkunoiden sidonnat
+
+BINDINGS:WClientWin
+BINDINGS:WGroupCW
+
+.SS Siirto- ja koonmuutostilan sidonnat
+
+BINDINGS:WMoveresMode
.SS Valikoiden sidonnat [mod_menu]
Show version
.TP
.B \-about
-Show about text (version, copyright)
+Show about text (version, author, license)
.SH BINDINGS
BINDINGS:WScreen
-.".SS Bindings operating on both frames and screens and their children
+.SS Bindings operating on all frames and screens and their children
BINDINGS:WMPlex
-.SS Bindings operating on frames and their children
+.SS Bindings operating on all frames and their children
BINDINGS:WFrame
+BINDINGS:WFrame.floating
-.SS Move/resize mode bindings
+.SS Bindings operating on top-level (non-transient) frames as well as screens
-BINDINGS:WMoveresMode
+BINDINGS:WMPlex.toplevel
-.SS Bindings for floating workspaces and frames [mod_floatws]
+.SS Bindings operating on top-level (non-transient) frames
-BINDINGS:WGroupWS
+BINDINGS:WFrame.toplevel
-BINDINGS:WFrame.floating
+.SS Bindings for client windows
+
+BINDINGS:WClientWin
+BINDINGS:WGroupCW
+
+.SS Move/resize mode bindings
+
+BINDINGS:WMoveresMode
.SS Bindings for menus [mod_menu]
+++ /dev/null
-Willkommen bei Ion!
-
-Wenn Sie nie zuvor Ion benutzt haben, empfehlen wir Ihnen unbedingt das
-Ion Handbuch zu studieren, bevor Sie weiter fortfahren. Obwohl es
-unten aufgeführt ist, können Sie später wieder darauf zurückgreifen, indem
-Sie <F1> drücken und dann <Enter>, oder, indem Sie 'man ion3' in einem
-Terminal ausführen. All das setzt voraus, dass Sie Ion in einem
-Standardspeicherplatz installiert haben, damit die System Kommandos die
-Handbuchseite finden können.
-
-Wenn Sie zu wild darauf sind, Ion auszuprobieren und gegen alle
-Empfehlungen das Lesen des Handbuches überspringen wollen, so sollten Sie
-zumindestens wissen, dass mit drücken der <F2> - Taste ein Terminal
-gestartet werden kann, und dass man auf das Hauptmenü mit <F12> zugreifen kann.
-
-Wenn Sie sich bereit fühlen, individuelle Konfigurationsdateien zu
-schreiben (was jederzeit möglich ist), so schauen sich bitte in das
-Konfigurationshandbuch, welches auf der Ion Webseite zu finden ist.
-(Link siehe Ende des Benutzerhandbuches) Ausserdem kann es nuetzlich sein,
-sich erst ein wenig mit Ion vertraut zu machen bevor man sich eingehend
-damit befasst. Damit Sie die Grundkonzepte erfassen koennen, die notwendig
-sind, um die nötigen Konfigurationsdateien zu verstehen.
static WPHolder *dock_prepare_manage(WDock *dock, const WClientWin *cwin,
const WManageParams *param UNUSED,
- int redir)
+ int priority)
{
- if(redir==MANAGE_REDIR_STRICT_YES)
+ if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_LOW))
return NULL;
return (WPHolder*)create_basicpholder((WRegion*)dock,
}
return region_manage_clientwin((WRegion*)dock, cwin, param,
- MANAGE_REDIR_PREFER_NO);
+ MANAGE_PRIORITY_NONE);
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libextl/extl.h>
#include <ioncore/binding.h>
#include <ioncore/conf-bindings.h>
#include <ioncore/key.h>
+#include <ioncore/stacking.h>
#include "menu.h"
#include "mkmenu.h"
extl_table_gets_i(param, "initial", &(fnp.initial));
par.flags=(MPLEX_ATTACH_SWITCHTO|
+ MPLEX_ATTACH_LEVEL|
MPLEX_ATTACH_UNNUMBERED|
MPLEX_ATTACH_SIZEPOLICY);
par.szplcy=SIZEPOLICY_FULL_BOUNDS;
+ par.level=STACKING_LEVEL_MODAL1+1;
menu=(WMenu*)mplex_do_attach_new(mplex, &par,
(WRegionCreateFn*)create_menu,
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libextl/readconfig.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_MENU_MAIN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_MENU_MENU_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <limits.h>
#include <ioncore/common.h>
#include <ioncore/pointer.h>
+#include <ioncore/stacking.h>
#include <ioncore/grab.h>
#include <libextl/extl.h>
#include "menu.h"
fnp.refg.h=0;
par.flags=(MPLEX_ATTACH_SWITCHTO|
- MPLEX_ATTACH_MODAL|
+ MPLEX_ATTACH_LEVEL|
MPLEX_ATTACH_UNNUMBERED|
MPLEX_ATTACH_SIZEPOLICY);
par.szplcy=SIZEPOLICY_FULL_BOUNDS;
-
+ par.level=STACKING_LEVEL_MODAL1+1;
+
return (WMenu*)mplex_do_attach_new(mplex, &par,
(WRegionCreateFn*)create_menu,
(void*)&fnp);
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_MENU_MKMENU_H
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
-- This is a slight abuse of the package.loaded variable perhaps, but
+++ /dev/null
-##
-## Management mode module Makefile
-##
-
-# System-specific configuration is in system.mk
-TOPDIR=..
-include $(TOPDIR)/build/system-inc.mk
-
-######################################
-
-INCLUDES += $(X11_INCLUDES) $(LIBTU_INCLUDES) $(LIBEXTL_INCLUDES) -I..
-CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE)
-
-SOURCES=main.c mgmtmode.c
-
-MAKE_EXPORTS=mod_mgmtmode
-
-MODULE=mod_mgmtmode
-
-######################################
-
-include $(TOPDIR)/build/rules.mk
-
-######################################
-
-_install: module_install
+++ /dev/null
-/*
- * ion/mod_mgmtmode/main.c
- *
- * Copyright (c) Tuomo Valkonen 2004-2007.
- *
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- */
-
-#include <libextl/readconfig.h>
-#include <ioncore/saveload.h>
-#include <ioncore/bindmaps.h>
-
-#include "exports.h"
-
-/*{{{ Module information */
-
-
-#include "../version.h"
-
-char mod_mgmtmode_ion_api_version[]=ION_API_VERSION;
-
-
-/*}}}*/
-
-
-/*{{{ Bindmaps */
-
-
-WBindmap *mod_mgmtmode_bindmap=NULL;
-
-
-/*}}}*/
-
-
-/*{{{ Init & deinit */
-
-
-void mod_mgmtmode_deinit()
-{
- if(mod_mgmtmode_bindmap!=NULL){
- ioncore_free_bindmap("WMgmtMode", mod_mgmtmode_bindmap);
- mod_mgmtmode_bindmap=NULL;
- }
-
- mod_mgmtmode_unregister_exports();
-}
-
-
-bool mod_mgmtmode_init()
-{
- mod_mgmtmode_bindmap=ioncore_alloc_bindmap("WMgmtMode", NULL);
-
- if(mod_mgmtmode_bindmap==NULL)
- return FALSE;
-
- if(!mod_mgmtmode_register_exports()){
- mod_mgmtmode_deinit();
- return FALSE;
- }
-
- extl_read_config("cfg_mgmtmode", NULL, TRUE);
-
- return TRUE;
-}
-
-
-/*}}}*/
-
+++ /dev/null
-/*
- * ion/mod_mgmtmode/main.h
- *
- * Copyright (c) Tuomo Valkonen 2004-2007.
- *
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef ION_MOD_MGMTMODE_MAIN_H
-#define ION_MOD_MGMTMODE_MAIN_H
-
-#include <ioncore/binding.h>
-
-extern bool mod_mgmtmode_init();
-extern void mod_mgmtmode_deinit();
-
-extern WBindmap *mod_mgmtmode_bindmap;
-
-#endif /* ION_MOD_MGMTMODE_MAIN_H */
+++ /dev/null
-/*
- * ion/mod_mgmtmode/mgmtmode.c
- *
- * Copyright (c) Tuomo Valkonen 2004-2007.
- *
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- */
-
-#include <math.h>
-#include <sys/time.h>
-#include <time.h>
-#include <limits.h>
-
-#include <libtu/objp.h>
-#include <ioncore/common.h>
-#include <ioncore/global.h>
-#include <ioncore/region.h>
-#include <ioncore/rootwin.h>
-#include <ioncore/binding.h>
-#include <ioncore/grab.h>
-#include "mgmtmode.h"
-#include "main.h"
-
-
-static WMgmtMode *mgmt_mode=NULL;
-
-
-static void cancel_mgmt(WRegion *reg);
-
-
-/*{{{ WMgmtMode */
-
-
-static bool mgmtmode_init(WMgmtMode *mode, WRegion *reg)
-{
- watch_init(&(mode->selw));
- watch_setup(&(mode->selw), (Obj*)reg, NULL);
- return TRUE;
-}
-
-
-static WMgmtMode *create_mgmtmode(WRegion *reg)
-{
- CREATEOBJ_IMPL(WMgmtMode, mgmtmode, (p, reg));
-}
-
-
-static void mgmtmode_deinit(WMgmtMode *mode)
-{
- if(mgmt_mode==mode)
- mgmt_mode=NULL;
-
- watch_reset(&(mode->selw));
-}
-
-
-/*EXTL_DOC
- * Select management mode target.
- */
-EXTL_EXPORT_MEMBER
-void mgmtmode_select(WMgmtMode *mode, WRegion *reg)
-{
- watch_setup(&(mode->selw), (Obj*)reg, NULL);
-}
-
-
-/*EXTL_DOC
- * Return management mode target.
- */
-EXTL_SAFE
-EXTL_EXPORT_MEMBER
-WRegion *mgmtmode_selected(WMgmtMode *mode)
-{
- return (WRegion*)(mode->selw.obj);
-}
-
-
-/*EXTL_DOC
- * End management mode.
- */
-EXTL_EXPORT_MEMBER
-void mgmtmode_finish(WMgmtMode *mode)
-{
- if(mgmt_mode==mode)
- cancel_mgmt(NULL);
-}
-
-
-EXTL_EXPORT
-IMPLCLASS(WMgmtMode, Obj, mgmtmode_deinit, NULL);
-
-
-/*}}}*/
-
-
-/*{{{ Rubberband */
-
-
-static void draw_rubberbox(WRootWin *rw, const WRectangle *rect)
-{
- XPoint fpts[5];
-
- fpts[0].x=rect->x;
- fpts[0].y=rect->y;
- fpts[1].x=rect->x+rect->w;
- fpts[1].y=rect->y;
- fpts[2].x=rect->x+rect->w;
- fpts[2].y=rect->y+rect->h;
- fpts[3].x=rect->x;
- fpts[3].y=rect->y+rect->h;
- fpts[4].x=rect->x;
- fpts[4].y=rect->y;
-
- XDrawLines(ioncore_g.dpy, WROOTWIN_ROOT(rw), rw->xor_gc, fpts, 5,
- CoordModeOrigin);
-}
-
-
-static void mgmtmode_draw(WMgmtMode *mode)
-{
- WRegion *reg=mgmtmode_selected(mode);
-
- if(reg!=NULL){
- WRootWin *rw=region_rootwin_of(reg);
- WRectangle g=REGION_GEOM(reg);
- int rx=0, ry=0;
-
- region_rootpos(reg, &rx, &ry);
-
- g.x=rx;
- g.y=ry;
-
- draw_rubberbox(rw, &g);
- }
-}
-
-
-static void mgmtmode_erase(WMgmtMode *mode)
-{
- mgmtmode_draw(mode);
-}
-
-
-/*}}}*/
-
-
-/*{{{ The mode */
-
-
-static bool mgmt_handler(WRegion *reg, XEvent *xev)
-{
- XKeyEvent *ev=&xev->xkey;
- WBinding *binding=NULL;
- WMgmtMode *mode;
-
- if(ev->type==KeyRelease)
- return FALSE;
-
- if(reg==NULL)
- return FALSE;
-
- mode=mgmt_mode;
-
- if(mode==NULL)
- return FALSE;
-
- binding=bindmap_lookup_binding(mod_mgmtmode_bindmap,
- BINDING_KEYPRESS,
- ev->state, ev->keycode);
-
- if(!binding)
- return FALSE;
-
- if(binding!=NULL){
- mgmtmode_erase(mode);
- extl_call(binding->func, "o", NULL, mode);
- if(mgmt_mode!=NULL)
- mgmtmode_draw(mgmt_mode);
- }
-
- return (mgmt_mode==NULL);
-}
-
-
-static void cancel_mgmt(WRegion *reg)
-{
- if(mgmt_mode!=NULL){
- mgmtmode_erase(mgmt_mode);
- destroy_obj((Obj*)mgmt_mode);
- }
- ioncore_grab_remove(mgmt_handler);
-}
-
-
-/*EXTL_DOC
- * Begin management mode.
- */
-EXTL_EXPORT
-WMgmtMode *mod_mgmtmode_begin(WRegion *reg)
-{
- if(mgmt_mode!=NULL)
- return NULL;
-
- mgmt_mode=create_mgmtmode(reg);
-
- if(mgmt_mode==NULL)
- return NULL;
-
- ioncore_grab_establish((WRegion*)region_rootwin_of(reg),
- mgmt_handler,
- (GrabKilledHandler*)cancel_mgmt, 0);
-
- mgmtmode_draw(mgmt_mode);
-
- return mgmt_mode;
-}
-
-
-/*}}}*/
+++ /dev/null
-/*
- * ion/mod_mgmtmode/mgmtmode.h
- *
- * Copyright (c) Tuomo Valkonen 2004-2007.
- *
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef ION_MOD_MGMTMODE_MGMTMODE_H
-#define ION_MOD_MGMTMODE_MGMTMODE_H
-
-#include <ioncore/common.h>
-#include <libextl/extl.h>
-
-INTRCLASS(WMgmtMode);
-
-DECLCLASS(WMgmtMode){
- Obj obj;
- Watch selw;
-};
-
-
-extern WMgmtMode *mod_mgmtmode_begin(WRegion *reg);
-
-extern void mgmtmode_select(WMgmtMode *mode, WRegion *reg);
-extern WRegion *mgmtmode_selected(WMgmtMode *mode);
-
-extern void mgmtmode_finish(WMgmtMode *mode);
-
-#endif /* ION_MOD_MGMTMODE_MGMTMODE_H */
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_COMPLETE_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_EDLN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <ioncore/global.h>
#include <ioncore/focus.h>
#include <ioncore/frame.h>
+#include <ioncore/stacking.h>
#include <libtu/objp.h>
#include "wmessage.h"
#include "fwarn.h"
return NULL;
par.flags=(MPLEX_ATTACH_SWITCHTO|
- MPLEX_ATTACH_MODAL|
+ MPLEX_ATTACH_LEVEL|
MPLEX_ATTACH_UNNUMBERED|
MPLEX_ATTACH_SIZEPOLICY);
par.szplcy=SIZEPOLICY_FULL_BOUNDS;
+ par.level=STACKING_LEVEL_MODAL1+1;
return (WMessage*)mplex_do_attach_new(mplex, &par,
(WRegionCreateFn*)create_wmsg,
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_FWARN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_HISTORY_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libmainloop/defer.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_INPUT_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_INPUTP_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_LISTING_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libextl/readconfig.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_MAIN_H
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
--DOC
--- This query asks for the name of a client window and attaches
--- it to the frame the query was opened in. It uses the completion
--- function \fnref{ioncore.complete_clientwin}.
+-- This query asks for the name of a client window and switches
+-- focus to the one entered. It uses the completion function
+-- \fnref{ioncore.complete_clientwin}.
function mod_query.query_gotoclient(mplex)
mod_query.query(mplex, TR("Go to window:"), nil,
mod_query.gotoclient_handler,
end
--DOC
--- This query asks for the name of a client window and switches
--- focus to the one entered. It uses the completion function
--- \fnref{ioncore.complete_clientwin}.
+-- This query asks for the name of a client window and attaches
+-- it to the frame the query was opened in. It uses the completion
+-- function \fnref{ioncore.complete_clientwin}.
function mod_query.query_attachclient(mplex)
mod_query.query(mplex, TR("Attach window:"), nil,
mod_query.attachclient_handler,
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
local function ws_chdir(mplex, params)
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libextl/extl.h>
#include <ioncore/binding.h>
#include <ioncore/regbind.h>
#include <ioncore/bindmaps.h>
+#include <ioncore/stacking.h>
#include <ioncore/key.h>
#include "query.h"
#include "wedln.h"
fnp.completor=completor;
par.flags=(MPLEX_ATTACH_SWITCHTO|
- MPLEX_ATTACH_MODAL|
+ MPLEX_ATTACH_LEVEL|
MPLEX_ATTACH_UNNUMBERED|
MPLEX_ATTACH_SIZEPOLICY);
par.szplcy=SIZEPOLICY_FULL_BOUNDS;
+ par.level=STACKING_LEVEL_MODAL1+1;
wedln=(WEdln*)mplex_do_attach_new(mplex, &par,
(WRegionCreateFn*)create_wedln,
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_QUERY_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include "wedln.h"
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
/*EXTL_DOC
* Call completion handler with the text between the beginning of line and
* current cursor position, or select next/previous completion from list if in
- * auto-show-completions mode and \var{cycle} is set to ``next'' or ``prev'',
- * respectively. The \var{mode} may be ``history'' or ``normal''. If it is
+ * auto-show-completions mode and \var{cycle} is set to \codestr{next} or
+ * \codestr{prev}, respectively.
+ * The \var{mode} may be \codestr{history} or \codestr{normal}. If it is
* not set, the previous mode is used. Normally next entry is not cycled to
* despite the setting of \var{cycle} if mode switch occurs. To override
- * this, use ``next-always'' and ``prev-always'' for \var{cycle}.
+ * this, use \codestr{next-always} and \codestr{prev-always} for \var{cycle}.
*/
EXTL_EXPORT_MEMBER
void wedln_complete(WEdln *wedln, const char *cycle, const char *mode)
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_WEDLN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_QUERY_WMESSAGE_H
*
* Copyright (c) Tuomo Valkonen 2004-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <stdlib.h>
*
* Copyright (c) Tuomo Valkonen 2004-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
#include <ioncore/saveload.h>
#include <ioncore/screen.h>
#include <ioncore/mplex.h>
+#include <ioncore/stacking.h>
#include <ioncore/ioncore.h>
#include <ioncore/global.h>
#include <ioncore/framep.h>
#include <ioncore/frame.h>
#include <ioncore/names.h>
+#include <ioncore/group.h>
+#include <ioncore/group-ws.h>
#include "main.h"
#include "exports.h"
#define SP_NAME "*scratchpad*"
+#define SPWS_NAME "*scratchws*"
/*}}}*/
}
-static WFrame *create(WMPlex *mplex, int flags)
+static WRegion *create_scratchws(WWindow *parent, const WFitParams *fp,
+ void *unused)
{
- WFrame *sp;
+ WRegion *reg;
+ WRegionAttachData data;
+ WGroupAttachParams par;
+ WGroupWS *ws;
+
+ ws=create_groupws(parent, fp);
+
+ if(ws==NULL)
+ return NULL;
+
+ region_set_name((WRegion*)ws, SPWS_NAME);
+
+ data.type=REGION_ATTACH_NEW;
+ data.u.n.fn=create_frame_scratchpad;
+ data.u.n.param=NULL;
+
+ par.szplcy_set=TRUE;
+ par.szplcy=SIZEPOLICY_FREE_GLUE;
+
+ par.geom_set=TRUE;
+ par.geom.w=minof(fp->g.w, CF_SCRATCHPAD_DEFAULT_W);
+ par.geom.h=minof(fp->g.h, CF_SCRATCHPAD_DEFAULT_H);
+ par.geom.x=(fp->g.w-par.geom.w)/2;
+ par.geom.y=(fp->g.h-par.geom.h)/2;
+
+ par.level_set=TRUE;
+ par.level=STACKING_LEVEL_MODAL1;
+
+ par.bottom=TRUE;
+
+ reg=group_do_attach(&ws->grp, &par, &data);
+
+ if(reg==NULL){
+ destroy_obj((Obj*)ws);
+ return NULL;
+ }
+
+ region_set_name((WRegion*)reg, SP_NAME);
+
+ return (WRegion*)ws;
+}
+
+
+static WRegion *create(WMPlex *mplex, int flags)
+{
+ WRegion *sp;
WMPlexAttachParams par;
- int sw=REGION_GEOM(mplex).w, sh=REGION_GEOM(mplex).h;
par.flags=(flags
|MPLEX_ATTACH_UNNUMBERED
- |MPLEX_ATTACH_MODAL
|MPLEX_ATTACH_SIZEPOLICY
- |MPLEX_ATTACH_GEOM);
- par.szplcy=SIZEPOLICY_FREE_GLUE;
-
- par.geom.w=minof(sw, CF_SCRATCHPAD_DEFAULT_W);
- par.geom.h=minof(sh, CF_SCRATCHPAD_DEFAULT_H);
- par.geom.x=(sw-par.geom.w)/2;
- par.geom.y=(sh-par.geom.h)/2;
+ |MPLEX_ATTACH_PSEUDOMODAL);
+ par.szplcy=SIZEPOLICY_FULL_EXACT;
- sp=(WFrame*)mplex_do_attach_new((WMPlex*)mplex, &par,
- create_frame_scratchpad,
- NULL);
+ sp=mplex_do_attach_new((WMPlex*)mplex, &par,
+ create_scratchws,
+ NULL);
-
- if(sp==NULL){
+ if(sp==NULL)
warn(TR("Unable to create scratchpad."));
- }
-
- region_set_name((WRegion*)sp, SP_NAME);
return sp;
}
if(nm==NULL)
return FALSE;
- if(inst_off<0)
- return (strcmp(nm, SP_NAME)==0);
- else
- return (strncmp(nm, SP_NAME, inst_off)==0);
+ return (inst_off<0
+ ? (strcmp(nm, SP_NAME)==0 ||
+ strcmp(nm, SPWS_NAME)==0)
+ : (strncmp(nm, SP_NAME, inst_off)==0 ||
+ strncmp(nm, SPWS_NAME, inst_off)==0));
}
/*EXTL_DOC
* Change displayed status of some scratchpad on \var{mplex} if one is
- * found. The parameter \var{how} is one of (set/unset/toggle).
+ * found. The parameter \var{how} is one of
+ * \codestr{set}, \codestr{unset}, or \codestr{toggle}.
+ * The resulting status is returned.
*/
EXTL_EXPORT
bool mod_sp_set_shown_on(WMPlex *mplex, const char *how)
/*EXTL_DOC
* Toggle displayed status of \var{sp}.
- * The parameter \var{how} is one of (set/unset/toggle).
+ * The parameter \var{how} is one of
+ * \codestr{set}, \codestr{unset}, or \codestr{toggle}.
+ * The resulting status is returned.
*/
EXTL_EXPORT
bool mod_sp_set_shown(WFrame *sp, const char *how)
*
* Copyright (c) Tuomo Valkonen 2004-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_SP_MAIN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_STATUSBAR_DRAW_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <sys/time.h>
return FALSE;
return region_manage_clientwin((WRegion*)sb, cwin, param,
- MANAGE_REDIR_PREFER_NO);
+ MANAGE_PRIORITY_NONE);
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_STATUSBAR_MAIN_H
--
-- Copyright (c) Tuomo Valkonen 2004-2007.
--
--- Ion is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License as published by
--- the Free Software Foundation; either version 2.1 of the License, or
--- (at your option) any later version.
+-- See the included file LICENSE for details.
--
-- This is a slight abuse of the package.loaded variable perhaps, but
--DOC
--- Load modules and launch ion-statusd with configuration table \var{cfg}.
+-- Load modules and launch \file{ion-statusd} with configuration
+-- table \var{cfg}. The options for each \file{ion-statusd} monitor
+-- script should be contained in the corresponding sub-table of \var{cfg}.
function mod_statusbar.launch_statusd(cfg)
if statusd_pid>0 then
return
-- Initialisation and default settings {{{
--DOC
--- Create a statusbar.
+-- Create a statusbar. The possible parameters in the
+-- table \var{param} are:
+--
+-- \begin{tabularx}{\linewidth}{llX}
+-- Variable & Type & Description \\
+-- \var{template} & string & The template; see
+-- Section \ref{sec:statusbar}. \\
+-- \var{pos} & string & Position: \code{"tl"}, \code{"tr"},
+-- \code{"bl"} or \code{"br"}
+-- (for the obvious combinations of
+-- top/left/bottom/right). \\
+-- \var{screen} & integer & Screen number to create the statusbar on. \\
+-- \var{fullsize} & boolean & If set, the statusbar will waste
+-- space instead of adapting to layout. \\
+-- \var{systray} & boolaen & Swallow (KDE protocol) systray icons. \\
+-- \end{tabularx}
+--
function mod_statusbar.create(param)
local scr=ioncore.find_screen_id(param.screen or 0)
if not scr then
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
static WPHolder *statusbar_prepare_manage(WStatusBar *sb,
const WClientWin *cwin,
const WManageParams *param,
- int redir)
+ int priority)
{
- if(redir==MANAGE_REDIR_STRICT_YES)
+ if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_LOW))
return NULL;
return (WPHolder*)create_basicpholder((WRegion*)sb,
if(mgr!=NULL)
return region_prepare_manage(mgr, cwin, param,
- MANAGE_REDIR_PREFER_NO);
+ MANAGE_PRIORITY_NONE);
else
return NULL;
}
/*EXTL_DOC
* Enable or disable use of \var{sb} as systray.
- * The parameter \var{how} can be one of (set/unset/toggle).
+ * The parameter \var{how} can be one of
+ * \codestr{set}, \codestr{unset}, or \codestr{toggle}.
* Resulting state is returned.
*/
EXTL_EXPORT_AS(WStatusBar, set_systray)
/*EXTL_DOC
* Is \var{sb} used as a systray?
*/
-EXTL_EXPORT_MEMBER
+EXTL_EXPORT_AS(WStatusBar, is_systray)
bool statusbar_is_systray_extl(WStatusBar *sb)
{
return sb->systray_enabled;
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_STATUSBAR_STATUSBAR_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/map.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_TILING_MAIN_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/objp.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_PANEWS_PANEHANDLE_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <ioncore/common.h>
WPHolder *tiling_prepare_manage(WTiling *ws, const WClientWin *cwin,
- const WManageParams *mp, int redir)
+ const WManageParams *mp, int priority)
{
+ int cpriority=MANAGE_PRIORITY_SUBX(priority, MANAGE_PRIORITY_NORMAL);
WRegion *target=NULL;
WTilingPlacementParams param;
WPHolder *ph;
bool ret;
-
- if(redir==MANAGE_REDIR_STRICT_NO)
- return NULL;
-
+
param.ws=ws;
param.reg=(WRegion*)cwin;
param.mp=mp;
target=(WRegion*)param.res_frame;
- ph=region_prepare_manage(target, cwin, mp, redir);
+ ph=region_prepare_manage(target, cwin, mp, cpriority);
if(ph!=NULL)
return ph;
}
return NULL;
}
- return region_prepare_manage(target, cwin, mp, redir);
+ return region_prepare_manage(target, cwin, mp, cpriority);
}
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_TILING_PLACEMENT_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libtu/minmax.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_TILING_SPLIT_STDISP_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <limits.h>
}
+/* Note: both hprimn and vprimn are inverted when descending. Therefore
+ * one should be either PRIMN_NONE or PRIMN_ANY for sensible geometric
+ * navigation. (Both are PRIMN_TL or PRIMN_BR for pseudo-linear
+ * next/previous navigation.)
+ */
WSplit *splitsplit_nextto(WSplitSplit *node, WSplit *child,
WPrimn hprimn, WPrimn vprimn,
WSplitFilter *filter)
WPrimn primn=(node->dir==SPLIT_HORIZONTAL ? hprimn : vprimn);
WSplit *split=NULL, *nnode=NULL;
- if(node->tl==child && (primn==PRIMN_BR || primn==PRIMN_ANY)){
+ if(node->tl==child && (primn==PRIMN_BR || primn==PRIMN_ANY))
split=node->br;
- primn=PRIMN_TL;
- }else if(node->br==child && (primn==PRIMN_TL || primn==PRIMN_ANY)){
+ else if(node->br==child && (primn==PRIMN_TL || primn==PRIMN_ANY))
split=node->tl;
- primn=PRIMN_BR;
- }
if(split!=NULL){
- if(node->dir==SPLIT_HORIZONTAL){
- hprimn=primn;
- vprimn=primn_none2any(vprimn);
- }else{
- vprimn=primn;
- hprimn=primn_none2any(vprimn);
- }
-
- nnode=split_current_todir(split, hprimn, vprimn, filter);
+ nnode=split_current_todir(split,
+ primn_none2any(primn_invert(hprimn)),
+ primn_none2any(primn_invert(vprimn)),
+ filter);
}
-
+
+ if(nnode==NULL)
+ nnode=split_nextto((WSplit*)node, hprimn, vprimn, filter);
+
return nnode;
}
}
/*EXTL_DOC
- * Returns the direction of \var{split}; either ''vertical'' or
- * ''horizontal''.
+ * Returns the direction of \var{split}; either \codestr{vertical} or
+ * \codestr{horizontal}.
*/
EXTL_SAFE
EXTL_EXPORT_MEMBER
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_TILING_SPLIT_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_TILING_SPLITFLOAT_H
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <string.h>
}
-WPHolder *tiling_prepare_manage_transient(WTiling *ws,
- const WClientWin *transient,
- const WManageParams *param,
- int unused)
-{
- /* Transient manager searches should not cross tilings unless
- * explicitly floated.
- */
- if(extl_table_is_bool_set(transient->proptab, "float")){
- return region_prepare_manage_transient_default((WRegion*)ws,
- transient,
- param,
- unused);
- }else{
- return NULL;
- }
-}
-
-
/*}}}*/
/*EXTL_DOC
- * Create a new frame on \var{ws} above/below/left of/right of
- * \var{node} as indicated by \var{dirstr}. If \var{dirstr} is
- * prefixed with ''floating:'' a floating split is created.
+ * Create a new frame on \var{ws} \codestr{above}, \codestr{below}
+ * \codestr{left} of, or \codestr{right} of \var{node} as indicated
+ * by \var{dirstr}. If \var{dirstr} is prefixed with
+ * \codestr{floating:} a floating split is created.
*/
EXTL_EXPORT_MEMBER
WFrame *tiling_split(WTiling *ws, WSplit *node, const char *dirstr)
/*EXTL_DOC
* Split \var{frame} creating a new frame to direction \var{dirstr}
- * (one of ''left'', ''right'', ''top'' or ''bottom'') of \var{frame}.
+ * (one of \codestr{left}, \codestr{right}, \codestr{top} or
+ * \codestr{bottom}) of \var{frame}.
* If \var{attach_current} is set, the region currently displayed in
* \var{frame}, if any, is moved to thenew frame.
- * If \var{dirstr} is prefixed with ''floating:'' a floating split is
- * created.
+ * If \var{dirstr} is prefixed with \codestr{floating:}, a floating
+ * split is created.
*/
EXTL_EXPORT_MEMBER
WFrame *tiling_split_at(WTiling *ws, WFrame *frame, const char *dirstr,
/*EXTL_DOC
* Return the most previously active region next to \var{reg} in
- * direction \var{dirstr} (left/right/up/down). The region \var{reg}
+ * direction \var{dirstr} (\codestr{left}, \codestr{right}, \codestr{up},
+ * or \codestr{down}). The region \var{reg}
* must be managed by \var{ws}. If \var{any} is not set, the status display
* is not considered.
*/
/*EXTL_DOC
* Return the most previously active region on \var{ws} with no
* other regions next to it in direction \var{dirstr}
- * (left/right/up/down). If \var{any} is not set, the status
- * display is not considered.
+ * (\codestr{left}, \codestr{right}, \codestr{up}, or \codestr{down}).
+ * If \var{any} is not set, the status display is not considered.
*/
EXTL_SAFE
EXTL_EXPORT_MEMBER
/*EXTL_DOC
* Toggle floating of a split's sides at \var{split} as indicated by the
- * parameter \var{how} (set/unset/toggle). A split of the appropriate is
- * returned, if there was a change.
+ * parameter \var{how} (\codestr{set}, \codestr{unset}, or \codestr{toggle}).
+ * A split of the appropriate is returned, if there was a change.
*/
EXTL_EXPORT_AS(WTiling, set_floating)
WSplitSplit *tiling_set_floating_extl(WTiling *ws, WSplitSplit *split,
/*EXTL_DOC
* Toggle floating of the sides of a split containin \var{reg} as indicated
- * by the parameters \var{how} (set/unset/toggle) and \var{dirstr}
- * (left/right/up/down/any). The new status is returned (and \code{false}
- * also on error).
+ * by the parameters \var{how} (\codestr{set}, \codestr{unset}, or
+ * \codestr{toggle}) and \var{dirstr} (\codestr{left}, \codestr{right},
+ * \codestr{up}, or \codestr{down}). The new status is returned
+ * (and \code{false} also on error).
*/
EXTL_EXPORT_AS(WTiling, set_floating_at)
bool tiling_set_floating_at_extl(WTiling *ws, WRegion *reg, const char *how,
{(DynFun*)region_xwindow,
(DynFun*)tiling_xwindow},
- {(DynFun*)region_prepare_manage_transient,
- (DynFun*)tiling_prepare_manage_transient},
-
END_DYNFUNTAB
};
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#ifndef ION_MOD_TILING_TILING_H
##
MODULE_LIST = mod_tiling mod_query mod_menu \
- mod_dock mod_sp mod_sm de \
- mod_mgmtmode mod_statusbar
+ mod_dock mod_sp mod_sm mod_statusbar \
+ de
# Modules to -dlpreload into pwm if statically linking.
MSGCAT = msgcat
LXGETTEXT = lua-xgettext
-TRANSLATIONS := fi cs de ru
+TRANSLATIONS := fi cs
MO_FILES := $(patsubst %,%.mo, $(TRANSLATIONS))
PO_FILES := $(patsubst %,%.po, $(TRANSLATIONS))
update_cs: pot
$(MSGMERGE) -U cs.po $(POTFILE)
-update_ru: pot
- $(MSGMERGE) -U ru.po $(POTFILE)
-
-update_de: pot
- $(MSGMERGE) -U de.po $(POTFILE)
#
# Czech language translations for Ion3.
#
-# Copyright (c) Miroslav Kure 2004,2005,2006.
+# Copyright (c) Miroslav Kure 2004,2005,2006,2007.
#
# This file is distributed under the same license as the Ion3 package.
#
msgstr ""
"Project-Id-Version: Ion3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-11-12 12:07+0100\n"
-"PO-Revision-Date: 2006-11-12 12:16+0100\n"
+"POT-Creation-Date: 2007-04-22 15:41+0200\n"
+"PO-Revision-Date: 2007-04-22 15:42+0200\n"
"Last-Translator: Miroslav Kure <kurem at debian.cz>\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
msgstr "Èasový po¾adavek od X serveru selhal."
#
-#: ../ioncore/exec.c:177
+#: ../ioncore/exec.c:186
msgid "Not saving state: running under session manager."
msgstr "Neukládám stav: bì¾ím pod správcem sezení."
msgid "Invalid arguments."
msgstr "Neplatné argumenty."
-#: ../ioncore/screen.c:298
-msgid "act: "
-msgstr "act: "
-
-#: ../ioncore/screen.c:481
-msgid "Only workspace may not be destroyed."
-msgstr "Poslední pracovní plocha nemù¾e být zru¹ena."
+#: ../ioncore/screen.c:385
+msgid "Only workspace may not be destroyed/detached."
+msgstr "Jediná pracovní plocha nemù¾e být zru¹ena."
-#: ../ioncore/screen.c:489
+#: ../ioncore/screen.c:396
msgid "Screens may not be destroyed."
msgstr "Obrazovky nesmí být znièeny."
-#: ../ioncore/screen.c:525
+#: ../ioncore/screen.c:432
msgid "Invalid offset."
msgstr "Neplatné odsazení"
-#: ../ioncore/screen.c:568
+#: ../ioncore/screen.c:471
#, c-format
msgid "Unable to create a workspace on screen %d."
msgstr "Nemohu vytvoøit pracovní plochu na obrazovce %d."
-#: ../ioncore/sizehint.c:151
+#: ../ioncore/sizehint.c:157
msgid "Invalid client-supplied width/height increment."
msgstr "Klient zadal neplatný pøírùstek ¹íøky/vý¹ky."
-#: ../ioncore/sizehint.c:159
+#: ../ioncore/sizehint.c:165
msgid "Invalid client-supplied aspect-ratio."
msgstr "Klient zadal neplatný pomìr stran."
-#: ../ioncore/ioncore.c:74
+#: ../ioncore/ioncore.c:78
msgid ""
"This program is free software; you can redistribute it and/or\n"
"modify it under the terms of the GNU Lesser General Public\n"
"JAKÉKOLIV ZÁRUKY. Pro více podrobností se podívejte do licence GNU\n"
"Lesser General Public License.\n"
-#: ../ioncore/ioncore.c:155
+#: ../ioncore/ioncore.c:159
msgid "No encoding given in LC_CTYPE."
msgstr "V LC_CTYPE není zadáno kódování."
-#: ../ioncore/ioncore.c:437
+#: ../ioncore/ioncore.c:470
#, c-format
msgid "Could not connect to X display '%s'"
msgstr "Nemohu se pøipojit na X displej \"%s\""
-#: ../ioncore/ioncore.c:489
+#: ../ioncore/ioncore.c:522
msgid "Could not find a screen to manage."
msgstr "Nemohu najít obrazovku, kterou bych mohl spravovat."
msgid "Failed to create input context."
msgstr "Selhalo vytvoøení vstupního kontextu."
-#: ../ioncore/clientwin.c:411
+#: ../ioncore/clientwin.c:379
#, c-format
msgid "The transient_for hint for \"%s\" points to itself."
msgstr "Nápovìda transient_for pro \"%s\" ukazuje sama na sebe."
-#: ../ioncore/clientwin.c:415
+#: ../ioncore/clientwin.c:383
#, c-format
msgid ""
"Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" "
"Klientské okno \"%s\" má poru¹enou nápovìdu transient_for. (Schizofrenie "
"více rodièù \"Extended WM hints\"?)"
-#: ../ioncore/clientwin.c:420
+#: ../ioncore/clientwin.c:388
#, c-format
msgid "The transient_for window for \"%s\" is not on the same screen."
msgstr "Okno transient_for pro \"%s\" není na stejné obrazovce."
-#: ../ioncore/clientwin.c:440 ../ioncore/clientwin.c:527
-#: ../ioncore/clientwin.c:1300
+#: ../ioncore/clientwin.c:408 ../ioncore/clientwin.c:496
+#: ../ioncore/clientwin.c:1292
#, c-format
msgid "Window %#x disappeared."
msgstr "Okno %#x zmizelo."
-#: ../ioncore/clientwin.c:547
+#: ../ioncore/clientwin.c:516
msgid "Unable to find a matching root window!"
msgstr "Nemohu najít odpovídající koøenové okno!"
-#: ../ioncore/clientwin.c:582
+#: ../ioncore/clientwin.c:555
#, c-format
msgid "Unable to manage client window %#x."
msgstr "Nemohu spravovat klientské okno %#x."
-#: ../ioncore/clientwin.c:633
+#: ../ioncore/clientwin.c:604
msgid "Changes is WM_TRANSIENT_FOR property are unsupported."
msgstr "Zmìny vlastnosti WM_TRANSIENT_FOR nejsou podporovány."
#
-#: ../ioncore/clientwin.c:809
+#: ../ioncore/clientwin.c:776
msgid "Client does not support the WM_DELETE protocol."
msgstr "Klient nepodporuje protokol WM_DELETE."
-#: ../ioncore/clientwin.c:1306
+#: ../ioncore/clientwin.c:1298
msgid "Saved client window does not want to be managed."
msgstr "Ulo¾ené klientské okno nechce být spravováno."
msgid "Unable to store colourmap watch info."
msgstr "Nemohu ulo¾it informace o barevné mapì."
-#: ../ioncore/region.c:46
+#: ../ioncore/region.c:47
msgid "Creating region with negative width or height!"
msgstr "Vytváøím oblast se zápornou ¹íøkou nebo vý¹kou!"
-#: ../ioncore/region.c:94
+#: ../ioncore/region.c:95
#, c-format
msgid "Destroying object \"%s\" with client windows as children."
msgstr "Nièím objekt \"%s\" spoleènì s klientskými okny jako dìtmi."
-#: ../ioncore/region.c:395
+#: ../ioncore/region.c:434
+#, c-format
+msgid "Can not destroy %s: contains client windows."
+msgstr "Nemohu znièit %s: obsahuje klientská okna."
+
+#: ../ioncore/region.c:435
+msgid "(unknown)"
+msgstr "(neznámý)"
+
+#: ../ioncore/region.c:498
msgid "Failed to rescue some client windows - not closing."
msgstr "Záchrana nìkterých klientských oken selhala - nezavírám."
-#: ../ioncore/attach.c:71 ../ioncore/pholder.c:46
-msgid "Unable to reparent."
-msgstr "Nemohu zmìnit rodièe."
-
-#: ../ioncore/attach.c:157 ../ioncore/frame-pointer.c:282
+#: ../ioncore/attach.c:58 ../ioncore/frame-pointer.c:280
#, c-format
msgid "Attempt to make region %s manage its ancestor %s."
msgstr "Pokus, aby oblast %s spravovala svého pøedka %s."
-#: ../ioncore/manage.c:77
+#: ../ioncore/attach.c:83
+msgid "Unable to reparent."
+msgstr "Nemohu zmìnit rodièe."
+
+#: ../ioncore/attach.c:92
+msgid "Unexpected attach error: trying to recover by attaching to screen."
+msgstr "Neoèekávaná chyba pøipojení: zkou¹ím obnovit pøipojením k obrazovce."
+
+#: ../ioncore/attach.c:111
+msgid "Failed recovery."
+msgstr "Obnovení selhalo."
+
+#: ../ioncore/manage.c:193
msgid "Unable to find a screen for a new client window."
msgstr "Nemohu najít obrazovku pro nové klientské okno."
-#: ../ioncore/rootwin.c:223
+#: ../ioncore/rootwin.c:218
#, c-format
msgid "Unable to redirect root window events for screen %d."
msgstr "Nemohu pøesmìrovat události koøenového okna na obrazovce %d."
-#: ../ioncore/rootwin.c:319 ../ioncore/rootwin.c:344
-msgid "Xinerama sanity check failed; overlapping screens detected."
-msgstr "Kontrola Xineramy selhala: byly nalezeny pøekrývající se obrazovky."
-
-#: ../ioncore/rootwin.c:326 ../ioncore/rootwin.c:351
-msgid "Xinerama sanity check failed; zero size detected."
-msgstr "Kontrola Xineramy selhala: byla nalezena nulová velikost."
-
-#: ../ioncore/rootwin.c:379 ../ioncore/rootwin.c:397
-msgid "Don't know how to get Xinerama information for multiple X root windows."
-msgstr "Nevím, jak zpracovat informace z Xineramy pro více koøenových oken."
-
-#: ../ioncore/rootwin.c:393
-msgid "Error retrieving Xinerama information."
-msgstr "Chyba pøi získávání informaci z Xineramy."
-
-#: ../ioncore/rootwin.c:432 ../ioncore/rootwin.c:451
-#, c-format
-msgid "Unable to setup Xinerama screen %d."
-msgstr "Nemohu nastavit obrazovku Xineramy %d."
-
-#: ../ioncore/rootwin.c:464
-#, c-format
-msgid "Unable to setup X screen %d."
-msgstr "Nemohu nastavit X obrazovku %d."
-
-#: ../ioncore/names.c:90
+#: ../ioncore/names.c:91
#, c-format
msgid "Corrupt instance number %s."
msgstr "Poru¹ená instance èíslo %s."
-#: ../ioncore/saveload.c:125
+#: ../ioncore/saveload.c:98
#, c-format
msgid "Unknown class \"%s\", cannot create region."
msgstr "Neznámá tøída \"%s\", nemohu vytvoøit oblast."
-#: ../ioncore/saveload.c:205
+#: ../ioncore/saveload.c:202
#, c-format
msgid ""
"There were errors loading layout. Backing up current layout savefile as\n"
"Pøedtím nezapomeòte opravit konfiguraèní soubory, které zpùsobily tyto\n"
"problémy. (Mo¾ná chybìjící modul?)"
-#: ../ioncore/saveload.c:248
+#: ../ioncore/saveload.c:253
msgid "Unable to get file for layout backup."
msgstr "Nemohu získat soubor pro zálohu rozlo¾ení."
-#: ../ioncore/saveload.c:252
+#: ../ioncore/saveload.c:257
#, c-format
msgid "Backup file %s already exists."
msgstr "Zálo¾ní soubor %s ji¾ existuje."
-#: ../ioncore/saveload.c:258
+#: ../ioncore/saveload.c:263
msgid "Failed backup."
msgstr "Selhala záloha."
#
-#: ../ioncore/saveload.c:263
+#: ../ioncore/saveload.c:268
msgid "Unable to initialise layout on any screen."
msgstr "Na ¾ádné obrazovce nemohu inicializovat rozlo¾ení."
-#: ../ioncore/saveload.c:283
+#: ../ioncore/saveload.c:295
#, c-format
msgid "Unable to get configuration for screen %d."
msgstr "Nemohu získat nastavení pro obrazovku %d."
-#: ../ioncore/saveload.c:296
+#: ../ioncore/saveload.c:308
msgid "Unable to save layout."
msgstr "Nemohu ulo¾it rozlo¾ení."
-#: ../ioncore/conf.c:143
+#: ../ioncore/conf.c:235
msgid "User directory can not be set."
msgstr "U¾ivatelský adresáø nemù¾e být nastaven."
-#: ../ioncore/conf.c:217
+#: ../ioncore/conf.c:309
msgid "Some bindmaps were empty, loading ioncore_efbb."
msgstr "Nìkteré tabulky kláves jsou prázdné, nahrávám ioncore_efbb."
-#: ../ioncore/fullscreen.c:98
+#: ../ioncore/fullscreen.c:49
msgid "Failed to enter full screen mode."
msgstr "Selhal pøechod do celoobrazovkového re¾imu."
-#: ../ioncore/fullscreen.c:120
+#: ../ioncore/fullscreen.c:83
msgid ""
"Failed to return from full screen mode; remaining manager or parent from "
"previous location refused to manage us."
"Návrat z celoobrazovkového re¾imu se nezdaøil; zbývající správce nebo rodiè "
"z pøedchozího umístìní nás nechce spravovat."
-#: ../ioncore/mplex.c:172
-msgid "Refusing to destroy - not empty."
-msgstr "Odmítám zru¹it - není prázdné."
-
#
-#: ../ioncore/mplex.c:1678
+#: ../ioncore/mplex.c:1685
msgid "Invalid position setting."
msgstr "Neplatné nastavení pozice."
#
-#: ../ioncore/mplex.c:1718
+#: ../ioncore/mplex.c:1725
msgid "Invalid action setting."
msgstr "Neplatné nastavení akce."
-#: ../ioncore/gr.c:119
+#: ../ioncore/gr.c:120
#, c-format
msgid "Drawing engine %s is not registered!"
msgstr "Vykreslovací jednotka %s není registrována!"
-#: ../ioncore/gr.c:138
+#: ../ioncore/gr.c:139
#, c-format
msgid "Unable to find brush for style '%s'."
msgstr "Nemohu najít ¹tìtec pro styl \"%s\"."
-#: ../ioncore/gr.c:408
+#: ../ioncore/gr.c:646
msgid "No drawing engines loaded, trying \"de\"."
msgstr "Nebyly nahrány ¾ádné vykreslovací jednotky, zkou¹ím \"%s\"."
-#: ../ioncore/group.c:184 ../mod_tiling/tiling.c:96
+#: ../ioncore/frame-draw.c:314
+msgid "<empty frame>"
+msgstr "<prázdný rám>"
+
+#: ../ioncore/group.c:186 ../mod_tiling/tiling.c:92
#, c-format
msgid "Error reparenting %s."
msgstr "Chyba zmìny rodièe %s."
-#: ../ioncore/group.c:481 ../mod_tiling/tiling.c:668
-msgid "Workspace not empty - refusing to destroy."
-msgstr "Pracovní plocha není prázdná - odmítám zru¹it."
-
-#: ../ioncore/group.c:680
+#: ../ioncore/group.c:711
msgid "'bottom' already set."
msgstr "'bottom' je ji¾ nastaven."
msgid "Invalid direction parameter."
msgstr "Neplatný parametr smìru."
-#: ../ioncore/group-ws.c:67
+#: ../ioncore/group-ws.c:51
#, c-format
msgid "Unknown placement method \"%s\"."
msgstr "Neznámý zpùsob umístìní \"%s\"."
+#: ../ioncore/detach.c:176
+msgid "Failed to reattach."
+msgstr "Znovupøipojení selhalo."
+
+#: ../ioncore/screen-notify.c:190
+msgid "act: "
+msgstr "akt: "
+
#
-#: ../mod_tiling/tiling.c:77
+#: ../mod_tiling/tiling.c:73
msgid "Split not on workspace."
msgstr "Rozdìlení není na pracovní plo¹e."
-#: ../mod_tiling/tiling.c:373
+#: ../mod_tiling/tiling.c:348
msgid "Unable to create a node for status display."
msgstr "Nemohu vytvoøit uzel pro stavový øádek."
-#: ../mod_tiling/tiling.c:386
+#: ../mod_tiling/tiling.c:361
msgid "Unable to create new split for status display."
msgstr "Nemohu vytvoøit nové rozdìlení pro stavový øádek."
-#: ../mod_tiling/tiling.c:937
+#: ../mod_tiling/tiling.c:710
+msgid "Tiling in useless state."
+msgstr "Dl¾dice v neu¾iteèném stavu."
+
+#: ../mod_tiling/tiling.c:924
msgid "Invalid direction"
msgstr "Neplatný smìr"
#
-#: ../mod_tiling/tiling.c:970 ../mod_tiling/split.c:1018
+#: ../mod_tiling/tiling.c:957 ../mod_tiling/split.c:1018
msgid "Invalid node."
msgstr "Neplatný uzel."
#
-#: ../mod_tiling/tiling.c:989
+#: ../mod_tiling/tiling.c:976
msgid "Unable to split."
msgstr "Nemohu rozdìlit."
-#: ../mod_tiling/tiling.c:1092
-msgid "Nil frame."
-msgstr "Prázdný rám."
-
-#: ../mod_tiling/tiling.c:1097
-msgid "The frame is not managed by the workspace."
-msgstr "Rám není spravován pracovní plochou."
+#: ../mod_tiling/tiling.c:1090
+msgid ""
+"Unable to unsplit: Could not move client windows elsewhere within the tiling."
+msgstr "Nemohu slouèit: Nemohu pøesunout klientské okno nìkam do dla¾dic."
-#: ../mod_tiling/tiling.c:1196
+#: ../mod_tiling/tiling.c:1207
msgid "Nil parameter."
msgstr "Prázdný parametr."
-#: ../mod_tiling/tiling.c:1201
+#: ../mod_tiling/tiling.c:1212
msgid "Manager doesn't match."
msgstr "Správce se neshoduje."
-#: ../mod_tiling/tiling.c:1238
+#: ../mod_tiling/tiling.c:1249
msgid "The status display is not a valid parameter for this routine."
msgstr "Stavový displej není v této rutinì platným parametrem."
-#: ../mod_tiling/tiling.c:1329
+#: ../mod_tiling/tiling.c:1340
msgid "Refusing to float split directly containing the status display."
msgstr "Odmítám rozdìlit pøímo prvek obsahující stavový displej."
-#: ../mod_tiling/tiling.c:1392
+#: ../mod_tiling/tiling.c:1403
msgid "No suitable split here."
msgstr "®ádné vhodné rozdìlení."
#
-#: ../mod_tiling/tiling.c:1428
+#: ../mod_tiling/tiling.c:1439
msgid "Could not get split tree."
msgstr "Nemohu získat strom rozdìlení"
-#: ../mod_tiling/tiling.c:1449
+#: ../mod_tiling/tiling.c:1460
msgid "Workspace already has a status display node."
msgstr "Pracovní plocha ji¾ obsahuje stavový displej."
#
-#: ../mod_tiling/tiling.c:1487
+#: ../mod_tiling/tiling.c:1498
msgid "Missing region parameters."
msgstr "Chybìjící parametry oblasti."
-#: ../mod_tiling/tiling.c:1531 ../mod_tiling/splitfloat.c:780
+#: ../mod_tiling/tiling.c:1542 ../mod_tiling/splitfloat.c:780
msgid "Invalid direction."
msgstr "Neplatný smìr."
#
-#: ../mod_tiling/tiling.c:1606
+#: ../mod_tiling/tiling.c:1617
msgid "No split type given."
msgstr "Nebyl zadán typ rozdìlení."
-#: ../mod_tiling/tiling.c:1619
+#: ../mod_tiling/tiling.c:1630
msgid "Unknown split type."
msgstr "Neznámý typ rozdìlení."
#
#
-#: ../mod_tiling/tiling.c:1659
+#: ../mod_tiling/tiling.c:1670
msgid "The workspace is empty."
msgstr "Pracovní plocha je prázdná."
-#: ../mod_tiling/placement.c:106
+#: ../mod_tiling/placement.c:104
#, c-format
msgid ""
"Ooops... could not find a region to attach client window to on workspace %s."
msgstr "REGION_RQGEOM_TRYONLY není stavovým displejem podporován."
#
-#: ../mod_tiling/split.c:1082
+#: ../mod_tiling/split.c:1083
msgid "Splitting the status display is not allowed."
msgstr "Rozdìlení stavového displeje není povoleno."
-#: ../mod_tiling/split.c:1113 ../mod_tiling/splitfloat.c:903
+#: ../mod_tiling/split.c:1114 ../mod_tiling/splitfloat.c:903
msgid "Unable to split: not enough free space."
msgstr "Nelze rozdìlit: nedostatek volného místa."
-#: ../mod_tiling/split.c:1864
+#: ../mod_tiling/split.c:1865
#, c-format
msgid "Unable to get configuration for %s."
msgstr "Nemohu získat nastavení pro %s."
msgid "Status display badly located in split tree."
msgstr "Stavový øádek je ve stromu rozdìlení umístìn na ¹patném místì."
-#: ../mod_tiling/ops.c:28
-msgid "Already detached"
-msgstr "Ji¾ je odpojen"
-
-#: ../mod_tiling/ops.c:142
+#: ../mod_tiling/ops.c:72 ../mod_tiling/ops.c:120
msgid "Not member of a group"
msgstr "Není èlenem skupiny"
-#: ../mod_tiling/ops.c:147
+#: ../mod_tiling/ops.c:77
msgid "Manager group already has bottom"
-msgstr "Øídící skupina ji¾ je na dnì"
+msgstr "Øídící skupina ji¾ má dno"
+
+#: ../mod_tiling/ops.c:154
+msgid "Unable to move a region from tiling to group."
+msgstr "Nemohu pøesunout regiion z dlá¾dìní do skupiny."
-#: ../mod_query/wedln.c:777
+#: ../mod_query/wedln.c:813
msgid "history"
msgstr "historie"
-#: ../mod_query/fwarn.c:34
+#: ../mod_query/fwarn.c:35
msgid "Error:\n"
msgstr "Chyba:\n"
#
-#: ../mod_menu/menu.c:537
+#: ../mod_menu/menu.c:601
msgid "Empty menu."
msgstr "Prázdné menu."
#
-#: ../mod_sm/sm.c:110
+#: ../mod_sm/sm.c:111
msgid "Failed to set session directory."
msgstr "Selhalo nastavení adresáøe s relací."
msgid "Unable to connect to the session manager."
msgstr "Nemohu se pøipojit ke správci sezení."
-#: ../mod_sp/main.c:85
+#: ../mod_sp/main.c:126
msgid "Unable to create scratchpad."
msgstr "Nemohu vytvoøit poznámkový blok."
msgid "reading a pipe"
msgstr "ètu rouru"
-#: ../mod_statusbar/main.c:97
-msgid "ion-statusd launch timeout."
-msgstr "Èas spou¹tìní ion-statusd vypr¹el."
-
-#: ../mod_statusbar/main.c:160
+#: ../mod_statusbar/main.c:159
msgid "ion-statusd timed out."
msgstr "Èas ion-statusd vypr¹el."
-#: ../mod_statusbar/statusbar.c:1046
+#: ../mod_statusbar/statusbar.c:1081
#, c-format
msgid "[ %date || load: %load ] %filler%systray"
msgstr "[ %date || vytí¾ení: %load ] %filler%systray"
-#: ../de/init.c:42
+#: ../de/init.c:68
#, c-format
msgid "Border attribute %s sanity check failed."
msgstr "Selhala kontrola atributu okraje %s."
-#: ../de/init.c:65
+#: ../de/init.c:91
#, c-format
msgid "Unknown border style \"%s\"."
msgstr "Neznámý styl okraje \"%s\"."
-#: ../de/init.c:97
+#: ../de/init.c:111
+#, c-format
+msgid "Unknown border side configuration \"%s\"."
+msgstr "Neznámé nastavení okraje \"%s\"."
+
+#: ../de/init.c:144
#, c-format
msgid "Unable to allocate colour \"%s\"."
msgstr "Nemohu alokovat barvu \"%s\"."
-#: ../de/init.c:160
+#: ../de/init.c:210
#, c-format
msgid "Corrupt substyle table %d."
msgstr "Poru¹ená tabulka stylù %d."
-#: ../de/init.c:193
+#: ../de/init.c:243
#, c-format
msgid "Unknown text alignment \"%s\"."
msgstr "Neznámý textový prvek \"%s\"."
-#: ../de/init.c:263
+#: ../de/init.c:319
#, c-format
msgid "'based_on' for %s points back to the style itself."
msgstr "Èást 'based_on' stylu %s ukazuje sama na sebe."
-#: ../de/init.c:266
+#: ../de/init.c:322
#, c-format
-msgid "Unknown base style \"%s\"."
-msgstr "Neznámý základní styl \"%s\"."
+msgid "Unknown base style. \"%s\""
+msgstr "Neznámý základní styl. \"%s\""
#: ../de/font.c:47
#, c-format
#: ../de/style.c:315
#, c-format
-msgid "Style %s still in use [%d] but the module is being unloaded!"
-msgstr "Styl %s se stále pou¾ívá [%d], ale modul se ji¾ ru¹í z pamìti!"
+msgid "Style is still in use [%d] but the module is being unloaded!"
+msgstr "Styl se stále pou¾ívá [%d], ale modul se ji¾ ru¹í z pamìti!"
#: ../ion/ion.c:42 ../pwm/pwm.c:42
msgid "X display to use"
msgstr "Pøidá adresáø do prohledávané cesty"
#: ../ion/ion.c:51 ../pwm/pwm.c:51
-msgid "Manage default root window/non-Xinerama screen only"
-msgstr "Spravuje pouze implicitní koøenové okno/obrazovku bez Xineramy"
-
-#: ../ion/ion.c:55
-msgid "Use Xinerama screen information (default: 1/yes)"
-msgstr "Pou¾ít Xineramu (implicitnì: 1/ano)"
+msgid "Manage default screen only"
+msgstr "Spravuje pouze výchozí obrazovku"
-#: ../ion/ion.c:58 ../pwm/pwm.c:58
-msgid "Ignored: not compiled with Xinerama support"
-msgstr "Ignorováno: program je sestaven bez podpory Xineramy"
-
-#: ../ion/ion.c:62 ../pwm/pwm.c:62
+#: ../ion/ion.c:54 ../pwm/pwm.c:54
msgid "Name of session (affects savefiles)"
msgstr "Jméno sezení (ovlivní místo ulo¾ení)"
-#: ../ion/ion.c:65 ../pwm/pwm.c:65
+#: ../ion/ion.c:57 ../pwm/pwm.c:57
msgid "Session manager client ID"
msgstr "Klientské ID správce sezení"
-#: ../ion/ion.c:68 ../pwm/pwm.c:68
+#: ../ion/ion.c:60 ../pwm/pwm.c:60
msgid "Do not create startup error log and display it with xmessage."
msgstr ""
"Nevytváøet záznam o chybách pøi startu a nezobrazovat jej pomocí xmessage."
-#: ../ion/ion.c:72 ../pwm/pwm.c:72
+#: ../ion/ion.c:64 ../pwm/pwm.c:64
msgid "Show this help"
msgstr "Zobrazí tuto nápovìdu"
-#: ../ion/ion.c:75 ../pwm/pwm.c:75
+#: ../ion/ion.c:67 ../pwm/pwm.c:67
msgid "Show program version"
msgstr "Zobrazí verzi programu"
-#: ../ion/ion.c:78 ../pwm/pwm.c:78
+#: ../ion/ion.c:70 ../pwm/pwm.c:70
msgid "Show about text"
msgstr "Zobrazí nìco o programu"
-#: ../ion/ion.c:93
+#: ../ion/ion.c:85
msgid "Could not get user configuration file directory."
msgstr "Nemohu získat u¾ivatelùv adresáø s nastavením."
-#: ../ion/ion.c:107
+#: ../ion/ion.c:99
#, c-format
msgid "%s/welcome.txt"
msgstr "%s/welcome.cs.txt"
-#: ../ion/ion.c:140 ../pwm/pwm.c:87
+#: ../ion/ion.c:132 ../pwm/pwm.c:79
#, c-format
msgid ""
"Usage: %s [options]\n"
"Pou¾ití: %s [volby]\n"
"\n"
-#: ../ion/ion.c:200 ../pwm/pwm.c:150
-msgid "Invalid parameter to -xinerama."
-msgstr "Neplatný parametr pro -xinerama."
-
#
-#: ../ion/ion.c:219 ../pwm/pwm.c:169
+#: ../ion/ion.c:200 ../pwm/pwm.c:150
msgid "Invalid command line."
msgstr "Neplatná pøíkazová øádka."
-#: ../ion/ion.c:241
+#: ../ion/ion.c:222
msgid "Ion startup error log:\n"
msgstr "Záznam chyb pøi startu Ionu:\n"
-#: ../ion/ion.c:252 ../pwm/pwm.c:202
+#: ../ion/ion.c:233 ../pwm/pwm.c:183
msgid "Refusing to start due to encountered errors."
msgstr "Odmítám se spustit kvùli zaznamenaným chybám."
-#: ../pwm/pwm.c:55
-msgid "Use Xinerama screen information (default: 0/no)"
-msgstr "Pou¾ít Xineramu (implicitnì: 0/ne) "
-
-#: ../pwm/pwm.c:191
+#: ../pwm/pwm.c:172
msgid "PWM startup error log:\n"
msgstr "Záznam chyb pøi startu PWM:\n"
msgstr "Funkce '%s' má víc parametrù, ne¾ lze zpracovat obsluhou v 1. úrovni"
#
-#: ../libextl/luaextl.c:2373
+#: ../libextl/luaextl.c:2347
msgid "Maximal serialisation depth reached."
msgstr "Dosa¾ena maximální hloubka serializace."
-#: ../libextl/luaextl.c:2394
+#: ../libextl/luaextl.c:2368
#, c-format
msgid "Unable to serialise type %s."
msgstr "Nemohu serializovat typ %s."
-#: ../libextl/luaextl.c:2425
+#: ../libextl/luaextl.c:2399
msgid "-- This file has been generated by Ion. Do not edit.\n"
msgstr "-- Tento soubor byl vytvoøen Ionem. Neupravujte jej.\n"
"Kontrola typu selhala ve druhé úrovni obsluhy volání pro parametr %d "
"(obdr¾el %s, oèekával %s)."
-msgid "Grow-D"
-msgstr "Rùst dolù"
+msgid "Scroll the message or completions up/down."
+msgstr "Roluje zprávu nebo seznam dokonèení nahoru/dolù."
-msgid "Grow-U"
-msgstr "Rùst nahoru"
+msgid "Close the query/message box, not executing bound actions."
+msgstr "Zavøe okno s dotazem/zprávou, ani¾ by se spustily svázané akce.."
-msgid "Grow-R"
-msgstr "Rùst vpravo"
+msgid "Close the query and execute bound action."
+msgstr "Zavøe dotaz a spustí svázanou akci."
-msgid "Grow-L"
-msgstr "Rùst vlevo"
+msgid "Complete from history"
+msgstr "Doplní z historie."
-msgid "Pos-BR"
-msgstr "Pozice PD"
+msgid "Try to complete the entered text or cycle through completions."
+msgstr "Zkusí doplnit zadaný text nebo bude cyklovat mezi mo¾nostmi."
-msgid "Pos-BL"
-msgstr "Pozice LD"
+#
+msgid "Clear mark/cancel selection."
+msgstr "Sma¾e znaèku/zru¹í výbìr."
-msgid "Pos-TR"
-msgstr "Pozice PH"
+#
+msgid "Copy selection."
+msgstr "Zkopíruje výbìr."
-msgid "Pos-TL"
-msgstr "Pozice LH"
+#
+msgid "Cut selection."
+msgstr "Vyjme výbìr."
-msgid "Toggle floating dock."
-msgstr "Zapne plovoucí dok."
+#
+msgid "Set mark/begin selection."
+msgstr "Nastaví znaèku/zaèátek výbìru."
-msgid "Clear the menu's typeahead find buffer."
-msgstr "Vyma¾e buffer pro dopøedné hledání v menu."
+msgid "Paste from the clipboard."
+msgstr "Vlo¾í ze schránky."
-msgid "Select next/previous menu entry."
-msgstr "V menu vybere dal¹í/pøedchozí polo¾ku."
+msgid "Select next/previous (matching) history entry."
+msgstr "Vybere dal¹í/pøedchozí (odpovídající) polo¾ku historie."
-#
-#
-msgid "Activate current menu entry."
-msgstr "Aktivuje vybranou polo¾ku v menu."
+msgid "Transpose characters."
+msgstr "Transponuje znaky."
-msgid "Close the menu."
-msgstr "Zavøe menu."
+msgid "Delete the whole line."
+msgstr "Sma¾e celý øádek."
-msgid "New tiling"
-msgstr "Vytvoøit dla¾dice"
+msgid "Delete to end of line."
+msgstr "Sma¾e text do konce øádky."
-msgid "Detach"
-msgstr "Odpojit"
+msgid "Delete one word forward/backward."
+msgstr "Sma¾e slovo pøed/za kurzorem."
-msgid "Transpose"
-msgstr "Transponovat"
+msgid "Delete previous character."
+msgstr "Sma¾e pøedchozí znak."
-msgid "Flip"
-msgstr "Obrátit"
+msgid "Delete next character."
+msgstr "Sma¾e následující znak."
-msgid "Split horizontally"
-msgstr "Rozdìlit horizontálnì"
+msgid "Skip one word forward/backward."
+msgstr "Pøeskoèí slovo dopøedu/dozadu."
-msgid "Split vertically"
-msgstr "Rozdìlit vertikálnì"
+msgid "Go to end/beginning."
+msgstr "Skoèí na konec/zaèátek."
-msgid "At root"
-msgstr "Na koøenu"
+msgid "Move one character forward/backward."
+msgstr "Posune se o znak vpøed/vzad."
-msgid "Below"
-msgstr "Dole"
+msgid "Kill"
+msgstr "Ukonèit"
-msgid "Above"
-msgstr "Nahoøe"
+msgid "Attach tagged"
+msgstr "Pøipojit oznaèené"
-msgid "At right"
-msgstr "Vpravo"
+msgid "Rename"
+msgstr "Pøejmenovat"
-msgid "At left"
-msgstr "Vlevo"
+msgid "Close"
+msgstr "Zavøít"
-msgid "Float split"
-msgstr "Plovoucí okraj"
+msgid "De/reattach"
+msgstr "Od/pøipojit"
-msgid "Destroy frame"
-msgstr "Znièit rám"
+msgid "Toggle tag"
+msgstr "(Od)znaèit"
-msgid "Tile frame, if no tiling exists on the workspace"
-msgstr ""
-"Zmìní rám na dla¾dice (pokud zatím dla¾dice na pracovní plo¹e neexistují)."
+msgid "Window info"
+msgstr "Informace o oknì"
-msgid "Detach window from tiled frame"
-msgstr "Odpojí okno od dla¾dicového rámu"
+msgid "Clear tags"
+msgstr "Vyèistit znaèky"
-msgid "Destroy current frame."
-msgstr "Znièí aktuální rám."
+msgid "Exit"
+msgstr "Ukonèit"
-msgid "Split current frame horizontally."
-msgstr "Rozdìlí rám horizontálnì."
+msgid "Restart TWM"
+msgstr "Restartovat TWM"
-msgid "Go to frame above/below/right/left of current frame."
-msgstr "Pøejde do rámu nad/pod/vpravo/vlevo od aktuálního rámu."
+msgid "Restart"
+msgstr "Restartovat"
-msgid "Split current frame vertically."
-msgstr "Rozdìlí rám vertikálnì."
+msgid "Save"
+msgstr "Ulo¾it"
-msgid "Failed to create statusbar."
-msgstr "Selhalo vytvoøení stavového øádku."
+msgid "Session"
+msgstr "Sezení"
-msgid "Screen already has an stdisp. Refusing to create a statusbar."
-msgstr "Obrazovka ji¾ obsahuje stdisp. Odmítám vytvoøit stavový øádek."
+msgid "Styles"
+msgstr "Styly"
-msgid "Screen not found."
-msgstr "Obrazovka nebyla nalezna."
+msgid "About Ion"
+msgstr "O Ionu"
-msgid "Failed to start ion-statusd."
-msgstr "Selhalo spu¹tìní ion-statusd."
+msgid "Help"
+msgstr "Nápovìda"
-msgid "Errors starting ion-statusd:\n"
-msgstr "Chyba pøi startu ion-statusd:\n"
+msgid "Lock screen"
+msgstr "Zamknout obrazovku"
-msgid "Could not find %s"
-msgstr "Nemohu najít %s"
+msgid "Terminal"
+msgstr "Terminál"
-msgid "ion-statusd quit."
-msgstr "ion-statusd konèí."
+#
+msgid "Run..."
+msgstr "Spustit..."
-msgid "Not a directory."
-msgstr "Není adresáøem."
+#
+msgid "Move in specified direction."
+msgstr "Posune se v zadaném smìru."
-msgid "Invalid command"
-msgstr "Neplatný pøíkaz"
+msgid "Shrink in specified direction."
+msgstr "Zmen¹uje v zadaném smìru."
-msgid "Error in command string: "
-msgstr "Chyba v pøíkazu: "
+#
+msgid "Grow in specified direction."
+msgstr "Roste v zadaném smìru."
-msgid "Error compiling guard: %s"
-msgstr "Chyba pøi sestavení strá¾ce: %s"
+msgid "End the resize mode."
+msgstr "Ukonèí re¾im zmìny velikosti."
-msgid "Invalid guard %s."
-msgstr "Neplatná ochrana %s."
+msgid "Cancel the resize mode."
+msgstr "Zru¹í re¾im zmìny velikosti."
-msgid "Main menu:"
-msgstr "Hlavní menu:"
+msgid "Move the frame."
+msgstr "Pøesune rám."
-msgid "Context menu:"
-msgstr "Kontextové menu:"
+msgid "Lower the frame."
+msgstr "Pøesune rám do pozadí"
-msgid "Floating frame"
-msgstr "Plovoucí rám"
+#
+msgid "Raise the frame."
+msgstr "Pøesune rám do popøedí."
-msgid "Tiled frame"
-msgstr "Dla¾dicový rám"
+msgid "Toggle shade mode"
+msgstr "Pøepne stínový re¾im"
-msgid "Tiling"
-msgstr "Dla¾dice"
+msgid "Attach tagged objects to this frame."
+msgstr "Pøipojí oznaèené objekty k tomuto rámu."
-#
-msgid "Workspace"
-msgstr "Pracovní plocha"
+msgid "Maximize the frame horizontally/vertically."
+msgstr "Maximalizuje rám horizontálnì/vertikálnì."
-msgid "Screen"
-msgstr "Obrazovka"
+msgid "Move current object within the frame left/right."
+msgstr "Pøesune objekt v rámu vlevo/vpravo."
-msgid "Frame"
-msgstr "Rám"
+msgid "Switch to next/previous object within the frame."
+msgstr "Pøepne se na dal¹í/pøedchozí objekt v rámu."
-msgid "Recursive table - unable to deepcopy"
-msgstr "Rekurzivní tabulka - nemohu provést hlubokou kopii"
+msgid "Switch to n:th object within the frame."
+msgstr "Pøepne se do n-tého objektu v rámu."
-msgid ""
-"Making the following minimal emergency mappings:\n"
-" F2 -> xterm\n"
-" F11 -> restart\n"
-" F12 -> exit\n"
-" Mod1+C -> close\n"
-" Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-msgstr ""
-"Vytváøím nouzové pøiøazení kláves:\n"
-" F2 -> xterm\n"
-" F11 -> restart\n"
-" F12 -> exit\n"
-" Mod1+C -> close\n"
-" Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-
-msgid "Unable to append to non-table menu"
-msgstr "Nelze pøidat do netabulkového menu"
-
-msgid "Cannot save selection."
-msgstr "Nemohu ulo¾it výbìr."
-
-msgid "Save look selection in %s?"
-msgstr "Ulo¾it nastavení vzhledu do %s?"
-
-msgid "Too much result data"
-msgstr "Pøíli¹ mnoho výsledkù"
-
-msgid "Could not find client window %s."
-msgstr "Nemohu najít klientské okno %s."
+#
+msgid "Query for a client window to attach."
+msgstr "Dotá¾e se na klientské okno, které má pøipojit."
-msgid "Cannot attach: different root windows."
-msgstr "Nemohu pøipojit: rùzná koøenová okna."
+msgid "Move objects between frames by dragging and dropping the tab."
+msgstr "Pøesune objekty mezi rámy pomocí ta¾ení za zálo¾ku."
-msgid "Unknown error"
-msgstr "Neznámá chyba"
+msgid "Resize the frame."
+msgstr "Zmìní velikost rámu."
-msgid "Go to window:"
-msgstr "Jít do okna:"
+msgid "Switch the frame to display the object indicated by the tab."
+msgstr "Pøepne rám, aby zobrazoval objekt urèený zálo¾kou."
-msgid "Attach window:"
-msgstr "Pøipojit okno:"
+msgid "Begin move/resize mode."
+msgstr "Zahájí re¾im pøesunu/zmìny velikosti."
-msgid "Go to or create workspace:"
-msgstr "Vytvoøit nebo pøejít na pracovní plochu:"
+msgid "Display context menu."
+msgstr "Zobrazí kontextové menu."
-msgid "Exit Ion/Shutdown session (y/n)?"
-msgstr "Ukonèit Ion/ukonèit sezení (y/n)?"
+#
+msgid "Query for a client window to go to."
+msgstr "Dotá¾e se na klientské okno, do nìho¾ má pøejít."
-msgid "Restart Ion (y/n)?"
-msgstr "Restartovat Ion (y/n)?"
+msgid "Query for workspace to go to or create a new one."
+msgstr "Zeptá se na pracovní plochu, na kterou má pøejít, nebo ji vytvoøit."
-msgid "Frame name:"
-msgstr "Název rámu:"
+msgid "Query for file to view."
+msgstr "Zeptá se na soubor, který chcete zobrazit."
-msgid "Workspace name:"
-msgstr "Název pracovní plochy:"
+msgid "Query for file to edit."
+msgstr "Zeptá se na soubor, který chcete upravit."
-msgid "Edit file:"
-msgstr "Upravit soubor:"
+msgid "Query for host to connect to with SSH."
+msgstr "Zeptá se na jméno poèítaèe, ke kterému se má pøipojit pomocí SSH."
-msgid "View file:"
-msgstr "Prohlédnout soubor:"
+msgid "Query for Lua code to execute."
+msgstr "Zeptá se na lua kód, který má vykonat."
-msgid "Run:"
-msgstr "Spustit:"
+msgid "Query for command line to execute."
+msgstr "Zeptá se na pøíkaz, který má spustit."
-msgid "Failed to open ~/.ssh/known_hosts"
-msgstr "Selhalo otevøení ~/.ssh/known_hosts"
+#
+msgid "Run a terminal emulator."
+msgstr "Spustí emulátor terminálu."
-msgid "Failed to open ~/.ssh/config"
-msgstr "Selhalo otevøení ~/.ssh/config"
+msgid "Show the Ion manual page."
+msgstr "Zobrazí manuálovou stránku Ionu."
-msgid "SSH to:"
-msgstr "SSH na:"
+msgid "Query for manual page to be displayed."
+msgstr "Zeptá se na manuálovou stánku, kterou má zobrazit."
-msgid "Manual page (%s):"
-msgstr "Manuálová stránka (%s):"
+msgid "Toggle tag of current object."
+msgstr "Pøepne oznaèení aktuálního objektu."
-msgid "Lua code:"
-msgstr "Lua kód:"
+msgid "Detach (float) or reattach an object to its previous location."
+msgstr "Odpojí nebo znovu pøipojí objekt z/do pùvodního umístìní."
-msgid "Unknown menu %s."
-msgstr "Neznámé menu %s."
+msgid "Close current object."
+msgstr "Zavøe aktuální objekt."
-msgid "Missing submenu "
-msgstr "Chybìjící podmenu"
+msgid "Toggle client window group full-screen mode"
+msgstr "Pøepne skupinu klientského okna do celoobrazovkového re¾imu."
-msgid "%s:"
-msgstr "%s:"
+#
+msgid ""
+"Send next key press to the client window. Some programs may not allow this "
+"by default."
+msgstr ""
+"Po¹le následující stisk klávesy klientskému oknu. Nìkteré programy to "
+"implicitnì nepovolují."
-msgid "No entry '%s'"
-msgstr "®ádný záznam '%s'"
+#
+msgid "Kill client owning the client window."
+msgstr "Ukonèí klienta vlastnícího klientské okno."
+#
msgid ""
-"\n"
-"%sClass: %s\n"
-"%sRole: %s\n"
-"%sInstance: %s\n"
-"%sXID: 0x%x"
+"Nudge the client window. This might help with some programs' resizing "
+"problems."
msgstr ""
-"\n"
-"%sTøída: %s\n"
-"%sRole: %s\n"
-"%sInstance: %s\n"
-"%sXID: 0x%x"
+"Postrèí klientské okno. To mù¾e pomoci nìkterým programùm, které mají "
+"problémy se zmìnou velikosti."
-msgid "Toggle scratchpad."
-msgstr "Zapne poznámkový blok."
+msgid "Raise focused object, if possible."
+msgstr "Pokud je to mo¾né, pøesune zamìøený objekt nahoru."
-msgid "Programs"
-msgstr "Programy"
+msgid "Backward-circulate focus."
+msgstr "Cykluje vzad."
-msgid "Lock screen"
-msgstr "Zamknout obrazovku"
+msgid "Forward-circulate focus."
+msgstr "Cykluje vpøed."
-msgid "Help"
-msgstr "Nápovìda"
+msgid "Display the window list menu."
+msgstr "Zobrazí menu se seznamem oken."
+
+msgid "Display the main menu."
+msgstr "Zobrazí hlavní menu."
#
-msgid "Workspaces"
-msgstr "Pracovní plochy"
+#
+msgid "Create a new workspace of chosen default type."
+msgstr "Vytvoøí novou pracovní plochu vybraného typu."
-msgid "New"
-msgstr "Nový"
+#
+msgid "Go to next/previous screen on multihead setup."
+msgstr "Ve víceobrazovkovém nastavení pøejde na dal¹í/pøedchozí obrazovku."
-msgid "Styles"
-msgstr "Styly"
+#
+msgid "Go to n:th screen on multihead setup."
+msgstr "U víceobrazovkového nastavení pøejde na n-tou obrazovku."
-msgid "Session"
-msgstr "Sezení"
+#
+msgid "Clear all tags."
+msgstr "Vyèistí v¹echny znaèky."
-msgid "Close"
-msgstr "Zavøít"
+msgid "Go to first region demanding attention or previously active one."
+msgstr ""
+"Pøejde do prvního regionu vy¾adujícího pozornost nebo do pøedchozího "
+"aktivního."
-msgid "List"
-msgstr "Seznam"
+#
+msgid "Switch to next/previous object within current screen."
+msgstr "Pøepne se na dal¹í/pøedchozí objekt v aktuální obrazovce."
#
msgid ""
"Pøepne se na n-tý objekt (pracovní plochu, celoobrazovkové okno) na aktuální "
"obrazovce."
-#
-msgid "Switch to next/previous object within current screen."
-msgstr "Pøepne se na dal¹í/pøedchozí objekt v aktuální obrazovce."
+msgid "List"
+msgstr "Seznam"
-msgid "Go to first region demanding attention or previously active one."
-msgstr ""
-"Pøejde do prvního regionu vy¾adujícího pozornost nebo do pøedchozího "
-"aktivního."
+msgid "New"
+msgstr "Nový"
-#
-msgid "Clear all tags."
-msgstr "Vyèistí v¹echny znaèky."
+msgid "Dillo"
+msgstr "Dillo"
-#
-msgid "Go to n:th screen on multihead setup."
-msgstr "U víceobrazovkového nastavení pøejde na n-tou obrazovku."
+msgid "Konqueror"
+msgstr "Konqueror"
-#
-msgid "Go to next/previous screen on multihead setup."
-msgstr "Ve víceobrazovkovém nastavení pøejde na dal¹í/pøedchozí obrazovku."
+msgid "Links"
+msgstr "Links"
-#
-#
-msgid "Create a new workspace of chosen default type."
-msgstr "Vytvoøí novou pracovní plochu vybraného typu."
+msgid "Opera"
+msgstr "Opera"
-msgid "Display the main menu."
-msgstr "Zobrazí hlavní menu."
+msgid "Rxvt"
+msgstr "Rxvt"
-msgid "Display the window list menu."
-msgstr "Zobrazí menu se seznamem oken."
+msgid "W3M"
+msgstr "W3M"
-msgid "Forward-circulate focus."
-msgstr "Cykluje vpøed."
+msgid "XTerm"
+msgstr "XTerm"
-msgid "Backward-circulate focus."
-msgstr "Cykluje vzad."
+#
+msgid "Workspaces"
+msgstr "Pracovní plochy"
-msgid "Raise focused object, if possible."
-msgstr "Pokud je to mo¾né, pøesune zamìøený objekt nahoru."
+msgid "Programs"
+msgstr "Programy"
-#
-msgid ""
-"Nudge the client window. This might help with some programs' resizing "
-"problems."
-msgstr ""
-"Postrèí klientské okno. To mù¾e pomoci nìkterým programùm, které mají "
-"problémy se zmìnou velikosti."
+msgid "Show the PWM manual page."
+msgstr "Zobrazí manuálovou stránku PWM."
-#
-msgid "Kill client owning the client window."
-msgstr "Ukonèí klienta vlastnícího klientské okno."
+msgid "Toggle scratchpad."
+msgstr "Zapne poznámkový blok."
-#
msgid ""
-"Send next key press to the client window. Some programs may not allow this "
-"by default."
+"\n"
+"%sClass: %s\n"
+"%sRole: %s\n"
+"%sInstance: %s\n"
+"%sXID: 0x%x"
msgstr ""
-"Po¹le následující stisk klávesy klientskému oknu. Nìkteré programy to "
-"implicitnì nepovolují."
+"\n"
+"%sTøída: %s\n"
+"%sRole: %s\n"
+"%sInstance: %s\n"
+"%sXID: 0x%x"
-msgid "Toggle client window group full-screen mode"
-msgstr "Pøepne skupinu klientského okna do celoobrazovkového re¾imu."
+msgid "No entry '%s'"
+msgstr "®ádný záznam '%s'"
-msgid "Close current object."
-msgstr "Zavøe aktuální objekt."
+msgid "%s:"
+msgstr "%s:"
-msgid "Query for manual page to be displayed."
-msgstr "Zeptá se na manuálovou stánku, kterou má zobrazit."
+msgid "Missing submenu "
+msgstr "Chybìjící podmenu"
-msgid "Show the Ion manual page."
-msgstr "Zobrazí manuálovou stránku Ionu."
+msgid "Unknown menu %s."
+msgstr "Neznámé menu %s."
-#
-msgid "Run a terminal emulator."
-msgstr "Spustí emulátor terminálu."
+msgid "Lua code:"
+msgstr "Lua kód:"
-msgid "Query for command line to execute."
-msgstr "Zeptá se na pøíkaz, který má spustit."
+msgid "Manual page (%s):"
+msgstr "Manuálová stránka (%s):"
-msgid "Query for Lua code to execute."
-msgstr "Zeptá se na lua kód, který má vykonat."
+msgid "SSH to:"
+msgstr "SSH na:"
-msgid "Query for host to connect to with SSH."
-msgstr "Zeptá se na jméno poèítaèe, ke kterému se má pøipojit pomocí SSH."
+msgid "Failed to open ~/.ssh/config"
+msgstr "Selhalo otevøení ~/.ssh/config"
-msgid "Query for file to edit."
-msgstr "Zeptá se na soubor, který chcete upravit."
+msgid "Failed to open ~/.ssh/known_hosts"
+msgstr "Selhalo otevøení ~/.ssh/known_hosts"
-msgid "Query for file to view."
-msgstr "Zeptá se na soubor, který chcete zobrazit."
+msgid "Run:"
+msgstr "Spustit:"
-msgid "Query for workspace to go to or create a new one."
-msgstr "Zeptá se na pracovní plochu, na kterou má pøejít, nebo ji vytvoøit."
+msgid "View file:"
+msgstr "Prohlédnout soubor:"
-#
-msgid "Query for a client window to go to."
-msgstr "Dotá¾e se na klientské okno, do nìho¾ má pøejít."
+msgid "Edit file:"
+msgstr "Upravit soubor:"
-#
-msgid "Query for a client window to attach."
-msgstr "Dotá¾e se na klientské okno, které má pøipojit."
+msgid "Workspace name:"
+msgstr "Název pracovní plochy:"
-msgid "Display context menu."
-msgstr "Zobrazí kontextové menu."
+msgid "Frame name:"
+msgstr "Název rámu:"
-msgid "Maximize the frame horizontally/vertically."
-msgstr "Maximalizuje rám horizontálnì/vertikálnì."
+msgid "Restart Ion (y/n)?"
+msgstr "Restartovat Ion (y/n)?"
-msgid "Begin move/resize mode."
-msgstr "Zahájí re¾im pøesunu/zmìny velikosti."
+msgid "Exit Ion/Shutdown session (y/n)?"
+msgstr "Ukonèit Ion/ukonèit sezení (y/n)?"
-msgid "Switch the frame to display the object indicated by the tab."
-msgstr "Pøepne rám, aby zobrazoval objekt urèený zálo¾kou."
+msgid "Go to or create workspace:"
+msgstr "Vytvoøit nebo pøejít na pracovní plochu:"
-msgid "Resize the frame."
-msgstr "Zmìní velikost rámu."
+msgid "Attach window:"
+msgstr "Pøipojit okno:"
-msgid "Move the frame."
-msgstr "Pøesune rám."
+msgid "Go to window:"
+msgstr "Jít do okna:"
-msgid "Move objects between frames by dragging and dropping the tab."
-msgstr "Pøesune objekty mezi rámy pomocí ta¾ení za zálo¾ku."
+msgid "New workspace layout (default):"
+msgstr "Rozlo¾ení nové pracovní plochy (default):"
+
+msgid "Unknown error"
+msgstr "Neznámá chyba"
+
+msgid "Unknown layout"
+msgstr "Neznámé rozlo¾ení."
+
+msgid "Cannot attach: different root windows."
+msgstr "Nemohu pøipojit: rùzná koøenová okna."
-msgid "Tag current object within the frame."
-msgstr "Oznaèí aktuální objekt v rámu."
+msgid "Could not find client window %s."
+msgstr "Nemohu najít klientské okno %s."
+
+msgid "Too much result data"
+msgstr "Pøíli¹ mnoho výsledkù"
-msgid "Switch to n:th object within the frame."
-msgstr "Pøepne se do n-tého objektu v rámu."
+msgid "Could not find %s"
+msgstr "Nemohu najít %s"
-msgid "Switch to next/previous object within the frame."
-msgstr "Pøepne se na dal¹í/pøedchozí objekt v rámu."
+msgid "Not a directory."
+msgstr "Není adresáøem."
-msgid "Move current object within the frame left/right."
-msgstr "Pøesune objekt v rámu vlevo/vpravo."
+msgid "Invalid command"
+msgstr "Neplatný pøíkaz"
-msgid "Attach tagged objects to this frame."
-msgstr "Pøipojí oznaèené objekty k tomuto rámu."
+msgid "Error in command string: "
+msgstr "Chyba v pøíkazu: "
-msgid "Toggle shade mode"
-msgstr "Pøepne stínový re¾im"
+msgid "Error compiling guard: %s"
+msgstr "Chyba pøi sestavení strá¾ce: %s"
-#
-msgid "Raise the frame."
-msgstr "Pøesune rám do popøedí."
+msgid "Invalid guard %s."
+msgstr "Neplatná ochrana %s."
-msgid "Lower the frame."
-msgstr "Pøesune rám do pozadí"
+msgid "Main menu:"
+msgstr "Hlavní menu:"
-msgid "Cancel the resize mode."
-msgstr "Zru¹í re¾im zmìny velikosti."
+msgid "Context menu:"
+msgstr "Kontextové menu:"
-msgid "End the resize mode."
-msgstr "Ukonèí re¾im zmìny velikosti."
+msgid "Floating frame"
+msgstr "Plovoucí rám"
-#
-msgid "Grow in specified direction."
-msgstr "Roste v zadaném smìru."
+msgid "Tiled frame"
+msgstr "Dla¾dicový rám"
-msgid "Shrink in specified direction."
-msgstr "Zmen¹uje v zadaném smìru."
+msgid "Tiling"
+msgstr "Dla¾dice"
#
-msgid "Move in specified direction."
-msgstr "Posune se v zadaném smìru."
+msgid "Workspace"
+msgstr "Pracovní plocha"
-msgid "About Ion"
-msgstr "O Ionu"
+msgid "Screen"
+msgstr "Obrazovka"
-msgid "XTerm"
-msgstr "XTerm"
+msgid "Frame"
+msgstr "Rám"
-msgid "W3M"
-msgstr "W3M"
+msgid "Recursive table - unable to deepcopy"
+msgstr "Rekurzivní tabulka - nemohu provést hlubokou kopii"
-msgid "Rxvt"
-msgstr "Rxvt"
+msgid ""
+"Making the following minimal emergency mappings:\n"
+" F2 -> xterm\n"
+" F11 -> restart\n"
+" F12 -> exit\n"
+" Mod1+C -> close\n"
+" Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
+msgstr ""
+"Vytváøím nouzové pøiøazení kláves:\n"
+" F2 -> xterm\n"
+" F11 -> restart\n"
+" F12 -> exit\n"
+" Mod1+C -> close\n"
+" Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-msgid "Opera"
-msgstr "Opera"
+msgid "Unable to append to non-table menu"
+msgstr "Nelze pøidat do netabulkového menu"
-msgid "Links"
-msgstr "Links"
+msgid "Cannot save selection."
+msgstr "Nemohu ulo¾it výbìr."
-msgid "Konqueror"
-msgstr "Konqueror"
+msgid "Save look selection in %s?"
+msgstr "Ulo¾it nastavení vzhledu do %s?"
-msgid "Dillo"
-msgstr "Dillo"
+msgid "ion-statusd quit."
+msgstr "ion-statusd konèí."
-#
-msgid "Run..."
-msgstr "Spustit..."
+msgid "Errors starting ion-statusd:\n"
+msgstr "Chyba pøi startu ion-statusd:\n"
-msgid "Save"
-msgstr "Ulo¾it"
+msgid "Failed to start ion-statusd."
+msgstr "Selhalo spu¹tìní ion-statusd."
-msgid "Restart"
-msgstr "Restartovat"
+msgid "Screen not found."
+msgstr "Obrazovka nebyla nalezna."
-msgid "Restart TWM"
-msgstr "Restartovat TWM"
+msgid "Screen already has an stdisp. Refusing to create a statusbar."
+msgstr "Obrazovka ji¾ obsahuje stdisp. Odmítám vytvoøit stavový øádek."
-msgid "Exit"
-msgstr "Ukonèit"
+msgid "Failed to create statusbar."
+msgstr "Selhalo vytvoøení stavového øádku."
-msgid "Kill"
-msgstr "Ukonèit"
+msgid "Split current frame vertically."
+msgstr "Rozpùlí rám vertikálnì."
-msgid "Toggle tag"
-msgstr "(Od)znaèit"
+msgid "Go to frame above/below/right/left of current frame."
+msgstr "Pøejde do rámu nad/pod/vpravo/vlevo od aktuálního rámu."
-msgid "Attach tagged"
-msgstr "Pøipojit oznaèené"
+msgid "Split current frame horizontally."
+msgstr "Rozpùlí rám horizontálnì."
-msgid "Clear tags"
-msgstr "Vyèistit znaèky"
+msgid "Destroy current frame."
+msgstr "Znièí aktuální rám."
-msgid "Window info"
-msgstr "Informace o oknì"
+msgid "Tile frame, if no tiling exists on the workspace"
+msgstr ""
+"Zmìní rám na dla¾dice (pokud zatím dla¾dice na pracovní plo¹e neexistují)."
-#
-msgid "New workspace"
-msgstr "Nová pracovní plocha"
+msgid "Destroy frame"
+msgstr "Znièit rám"
-msgid "New empty workspace"
-msgstr "Nová prázdná pracovní plocha"
+msgid "Split vertically"
+msgstr "Rozpùlit vertikálnì"
-#
-msgid "Close workspace"
-msgstr "Zavøít pracovní plochu"
+msgid "Split horizontally"
+msgstr "Rozpùlit horizontálnì"
-msgid "Move one character forward/backward."
-msgstr "Posune se o znak vpøed/vzad."
+msgid "Flip"
+msgstr "Obrátit"
-msgid "Go to end/beginning."
-msgstr "Skoèí na konec/zaèátek."
+msgid "Transpose"
+msgstr "Transponovat"
-msgid "Skip one word forward/backward."
-msgstr "Pøeskoèí slovo dopøedu/dozadu."
+msgid "Untile"
+msgstr "Zru¹it dla¾dice"
-msgid "Delete next character."
-msgstr "Sma¾e následující znak."
+msgid "Float split"
+msgstr "Plovoucí okraj"
-msgid "Delete previous character."
-msgstr "Sma¾e pøedchozí znak."
+msgid "At left"
+msgstr "Vlevo"
-msgid "Delete one word forward/backward."
-msgstr "Sma¾e slovo pøed/za kurzorem."
+msgid "At right"
+msgstr "Vpravo"
-msgid "Delete to end of line."
-msgstr "Sma¾e text do konce øádky."
+msgid "Above"
+msgstr "Nahoøe"
-msgid "Delete the whole line."
-msgstr "Sma¾e celý øádek."
+msgid "Below"
+msgstr "Dole"
-msgid "Transpose characters."
-msgstr "Transponuje znaky."
+msgid "At root"
+msgstr "Na koøenu"
-msgid "Select next/previous (matching) history entry."
-msgstr "Vybere dal¹í/pøedchozí (odpovídající) polo¾ku historie."
+msgid "New tiling"
+msgstr "Vytvoøit dla¾dice"
-msgid "Paste from the clipboard."
-msgstr "Vlo¾í ze schránky."
+msgid "Close the menu."
+msgstr "Zavøe menu."
#
-msgid "Set mark/begin selection."
-msgstr "Nastaví znaèku/zaèátek výbìru."
-
#
-msgid "Cut selection."
-msgstr "Vyjme výbìr."
+msgid "Activate current menu entry."
+msgstr "Aktivuje vybranou polo¾ku v menu."
-#
-msgid "Copy selection."
-msgstr "Zkopíruje výbìr."
+msgid "Select next/previous menu entry."
+msgstr "V menu vybere dal¹í/pøedchozí polo¾ku."
-#
-msgid "Clear mark/cancel selection."
-msgstr "Sma¾e znaèku/zru¹í výbìr."
+msgid "Clear the menu's typeahead find buffer."
+msgstr "Vyma¾e buffer pro dopøedné hledání v menu."
-msgid "Try to complete the entered text or cycle through completions."
-msgstr "Zkusí doplnit zadaný text nebo bude cyklovat mezi mo¾nostmi."
+msgid "Toggle floating dock."
+msgstr "Zapne plovoucí dok."
-msgid "Complete from history"
-msgstr "Doplní z historie."
+msgid "Pos-TL"
+msgstr "Pozice LH"
-msgid "Close the query and execute bound action."
-msgstr "Zavøe dotaz a spustí svázanou akci."
+msgid "Pos-TR"
+msgstr "Pozice PH"
-msgid "Close the query/message box, not executing bound actions."
-msgstr "Zavøe okno s dotazem/zprávou, ani¾ by se spustily svázané akce.."
+msgid "Pos-BL"
+msgstr "Pozice LD"
-msgid "Scroll the message or completions up/down."
-msgstr "Roluje zprávu nebo seznam dokonèení nahoru/dolù."
+msgid "Pos-BR"
+msgstr "Pozice PD"
+
+msgid "Grow-L"
+msgstr "Rùst vlevo"
+
+msgid "Grow-R"
+msgstr "Rùst vpravo"
+
+msgid "Grow-U"
+msgstr "Rùst nahoru"
+
+msgid "Grow-D"
+msgstr "Rùst dolù"
msgid "press"
msgstr "stisk"
msgid "%s %s at %s"
msgstr "%s %s na %s"
+#~ msgid "Tag current object within the frame."
+#~ msgstr "Oznaèí aktuální objekt v rámu."
+
+#~ msgid "Xinerama sanity check failed; overlapping screens detected."
+#~ msgstr "Kontrola Xineramy selhala: byly nalezeny pøekrývající se obrazovky."
+
+#~ msgid "Xinerama sanity check failed; zero size detected."
+#~ msgstr "Kontrola Xineramy selhala: byla nalezena nulová velikost."
+
+#~ msgid ""
+#~ "Don't know how to get Xinerama information for multiple X root windows."
+#~ msgstr "Nevím, jak zpracovat informace z Xineramy pro více koøenových oken."
+
+#~ msgid "Error retrieving Xinerama information."
+#~ msgstr "Chyba pøi získávání informaci z Xineramy."
+
+#~ msgid "Unable to setup Xinerama screen %d."
+#~ msgstr "Nemohu nastavit obrazovku Xineramy %d."
+
+#~ msgid "Unable to setup X screen %d."
+#~ msgstr "Nemohu nastavit X obrazovku %d."
+
+#~ msgid "Refusing to destroy - not empty."
+#~ msgstr "Odmítám zru¹it - není prázdné."
+
+#~ msgid "Workspace not empty - refusing to destroy."
+#~ msgstr "Pracovní plocha není prázdná - odmítám zru¹it."
+
+#~ msgid "Nil frame."
+#~ msgstr "Prázdný rám."
+
+#~ msgid "The frame is not managed by the workspace."
+#~ msgstr "Rám není spravován pracovní plochou."
+
+#~ msgid "Already detached"
+#~ msgstr "Ji¾ je odpojen"
+
+#~ msgid "ion-statusd launch timeout."
+#~ msgstr "Èas spou¹tìní ion-statusd vypr¹el."
+
+#~ msgid "Use Xinerama screen information (default: 1/yes)"
+#~ msgstr "Pou¾ít Xineramu (implicitnì: 1/ano)"
+
+#~ msgid "Ignored: not compiled with Xinerama support"
+#~ msgstr "Ignorováno: program je sestaven bez podpory Xineramy"
+
+#~ msgid "Invalid parameter to -xinerama."
+#~ msgstr "Neplatný parametr pro -xinerama."
+
+#~ msgid "Use Xinerama screen information (default: 0/no)"
+#~ msgstr "Pou¾ít Xineramu (implicitnì: 0/ne) "
+
+#~ msgid "Detach window from tiled frame"
+#~ msgstr "Odpojí okno od dla¾dicového rámu"
+
+#
+#~ msgid "New workspace"
+#~ msgstr "Nová pracovní plocha"
+
+#~ msgid "New empty workspace"
+#~ msgstr "Nová prázdná pracovní plocha"
+
+#
+#~ msgid "Close workspace"
+#~ msgstr "Zavøít pracovní plochu"
+
#~ msgid "Unable to re-initialise workspace. Destroying."
#~ msgstr "Nemohu znovu inicializovat pracovní plochu. Nièím."
+++ /dev/null
-#
-# German language translations for Ion3.
-#
-# Copyright (c) Schott Robert 2005.
-#
-# This file is distributed under the same license as the Ion3 package.
-#
-
-msgid ""
-msgstr ""
-"Project-Id-Version: Ion3\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-10-11 18:33+0300\n"
-"PO-Revision-Date: 2005-02-13 23:50+0300\n"
-"Last-Translator: Schott Robert <r.schott at casepool.de>\n"
-"Language-Team: none\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../ioncore/conf-bindings.c:96
-msgid "Insane key combination."
-msgstr "Unsinnige Tastenkombination."
-
-#: ../ioncore/conf-bindings.c:100
-msgid "Could not convert keysym to keycode."
-msgstr "Konnte 'keysym' nicht in 'keycode' umwandeln."
-
-#: ../ioncore/conf-bindings.c:111
-#, c-format
-msgid "Unknown button \"%s\"."
-msgstr "Unbekannte Taste \"%s\"."
-
-#: ../ioncore/conf-bindings.c:116
-msgid "Insane button combination."
-msgstr "Unsinnige Tastenkombination."
-
-#: ../ioncore/conf-bindings.c:123 ../ioncore/conf-bindings.c:130
-msgid "Insane modifier combination."
-msgstr "Unsinnige Modifikationskombination."
-
-#: ../ioncore/conf-bindings.c:168
-#, c-format
-msgid "Can not wait on modifiers when no modifiers set in \"%s\"."
-msgstr ""
-"Kann nicht auf Modifikator warten, wenn kein Modifikator in \"%s\" gesetzt ist."
-
-#: ../ioncore/conf-bindings.c:186
-#, c-format
-msgid "Unable to add binding %s."
-msgstr "Die Bindung %s konnte nicht eingestellt werden."
-
-#: ../ioncore/conf-bindings.c:191
-#, c-format
-msgid "Unable to remove binding %s."
-msgstr "Die Bindung %s konnte nicht entfernt werden."
-
-#: ../ioncore/conf-bindings.c:230
-#, c-format
-msgid "Unable to add submap for binding %s."
-msgstr "Die 'submap' für die Bindung %s konnte nicht eingestellt werden."
-
-#
-#: ../ioncore/conf-bindings.c:260
-msgid "Binding type not set."
-msgstr "Bindungsart nicht gesetzt."
-
-#: ../ioncore/conf-bindings.c:270
-#, c-format
-msgid "Unknown binding type \"%s\"."
-msgstr "Unbekannte Bindungsart \"%s\"."
-
-#: ../ioncore/conf-bindings.c:291
-#, c-format
-msgid "Unknown area \"%s\" for binding %s."
-msgstr "Unbekannter Bereich \"%s.\" für die Bindung %s."
-
-#: ../ioncore/conf-bindings.c:332
-#, c-format
-msgid "Unable to get bindmap entry %d."
-msgstr "Der 'bindmap' Eintrag %d wurde nicht gefunden."
-
-#: ../ioncore/conf-bindings.c:374
-msgid "Unable to convert keysym to string."
-msgstr "Konnte keysym nicht in Zeichenkette umwandeln."
-
-#: ../ioncore/conf-bindings.c:388
-msgid "Unable to convert button to string."
-msgstr "Konnte Taste nicht in Zeichenkette umwandeln."
-
-#
-#: ../ioncore/event.c:78
-msgid "Time request from X server failed."
-msgstr "Zeitanfrage des X Servers fehlgeschlagen."
-
-#
-#: ../ioncore/exec.c:101
-msgid "Could not find a root window."
-msgstr "Konnte kein Wurzelfenster finden."
-
-#: ../ioncore/exec.c:134
-msgid "reading a pipe"
-msgstr "Weiterleitung wird ausgelesen"
-
-#
-#: ../ioncore/exec.c:296
-msgid "Not saving state: running under session manager."
-msgstr "Nicht gespeicherter Zustand: läuft im Sitzungsmanager."
-
-#: ../ioncore/strings.c:107 ../ioncore/strings.c:143
-msgid "Invalid multibyte string."
-msgstr "Unzulässige multibyte Zeichenkette."
-
-#: ../ioncore/strings.c:234
-#, c-format
-msgid "Error compiling regular expression: %s"
-msgstr "Fehler beim erstellen der regulären Ersetzung: %s"
-
-#: ../ioncore/modules.c:158
-msgid "Invalid module name."
-msgstr "Unzulässiger Modulname."
-
-#
-#: ../ioncore/modules.c:170
-msgid "The module is already loaded."
-msgstr "Das Modul wurde bereits geladen."
-
-#: ../ioncore/modules.c:185
-msgid ""
-"Module version information not found or version mismatch. Refusing to use."
-msgstr ""
-"Information zur Modulversion wurde nicht gefunden oder die Versionen stimmen nicht überein."
-"Benutzung wurde abgelehnt."
-
-#: ../ioncore/modules.c:196
-#, c-format
-msgid "Unable to initialise module %s."
-msgstr "Module %s konnte nicht initialisiert werden."
-
-#: ../ioncore/modules.c:220 ../../libextl/readconfig.c:368
-#, c-format
-msgid "Unable to find '%s' on search path."
-msgstr "Im Suchpfad konnte '%s' nicht gefunden werden."
-
-#: ../ioncore/modules.c:291
-msgid "Unknown module."
-msgstr "Unbekanntes Modul."
-
-#: ../ioncore/modules.c:299
-msgid "Unable to initialise module."
-msgstr "Module konnte nicht initialisiert werden."
-
-#: ../ioncore/modules.c:344
-msgid "No module to load given."
-msgstr "Kein Modul zum laden vorhanden."
-
-#: ../ioncore/screen.c:301
-msgid "act: "
-msgstr "act: "
-
-#: ../ioncore/screen.c:490
-msgid "Invalid offset."
-msgstr "Ungültiges offset."
-
-#: ../ioncore/screen.c:535
-msgid "Could not find a complete workspace class. Please load some modules."
-msgstr ""
-"Konnte keine komplette Workspace-Klasse finden."
-"Laden Sie bitte einige Module."
-
-#: ../ioncore/screen.c:545
-#, c-format
-msgid "Unable to create a workspace on screen %d."
-msgstr "Konnte keinen Arbeitsbereich auf dem Schirm %d erzeugen."
-
-#: ../ioncore/signal.c:291
-#, c-format
-msgid "Caught fatal signal %d. Dying without deinit."
-msgstr ""
-"Abbruch Signal %d aufgefangen. Beendet ohne deinit."
-
-#: ../ioncore/signal.c:300
-#, c-format
-msgid "Caught signal %d. Dying."
-msgstr "Signal %d wurde aufgefangen. Beendet."
-
-#: ../ioncore/sizehint.c:150
-msgid "Invalid client-supplied width/height increment."
-msgstr "Client lieferte ungültige Breiten/Höhen - Schrittweite."
-
-#: ../ioncore/sizehint.c:158
-msgid "Invalid client-supplied aspect-ratio."
-msgstr "Client lieferte ungültiges Seitenverhältnis."
-
-#: ../ioncore/ioncore.c:66
-msgid ""
-"This program is free software; you can redistribute it and/or\n"
-"modify it under the terms of the GNU Lesser General Public\n"
-"License as published by the Free Software Foundation; either\n"
-"version 2.1 of the License, or (at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
-"Lesser General Public License for more details.\n"
-msgstr ""
-"Dieses Programm ist freie Software; Sie können es weiter verteilen und/oder\n"
-"modifizieren solange es den Bedingungen der \"GNU Lesser General Public\"\n"
-"Lizenz entspricht. Veröffentlicht durch die \"Free Software Foundation\"; jede\n"
-"Lizenz der Version 2.1, oder (nach eigener Wahl) jede spätere Version.\n"
-"\n"
-"Dieses Programm wird mit der Hoffnung das es nützlich ist verteilt, \n"
-"aber OHNE JEGLICHE GARANTIE; ohne jede Garantie von MARKTFÄHIGKEIT oder\n"
-"EIGNUNG ZU EINEM BESTIMMTEN ZWECK. Siehe die \"GNU Lesser General Public\"\n"
-"Lizenz für detailliertere Angaben.\n"
-
-#: ../ioncore/ioncore.c:385
-#, c-format
-msgid "Could not connect to X display '%s'"
-msgstr "Konnte keine Verbindung zur X Anzeige '%s' herstellen."
-
-#: ../ioncore/ioncore.c:438
-msgid "Could not find a screen to manage."
-msgstr "Konnte keinen Bildschirm für diese Aktion finden."
-
-#: ../ioncore/xic.c:43
-msgid "Failed to open input method."
-msgstr "Öffnen der Eingabemethode ist fehlgeschlagen."
-
-#: ../ioncore/xic.c:48
-msgid "Input method doesn't support any style."
-msgstr "Die Eingabemethode unterstützt keine Art von Styles"
-
-#: ../ioncore/xic.c:63
-msgid "input method doesn't support my preedit type."
-msgstr "Die Eingabemethode unterstützt nicht meine Art von 'preedit'."
-
-#: ../ioncore/xic.c:91
-msgid "Failed to create input context."
-msgstr "Erstellen des Eingabezusammenhangs ist fehlgeschlagen. "
-
-#: ../ioncore/clientwin.c:376
-#, c-format
-msgid "The transient_for hint for \"%s\" points to itself."
-msgstr "Der 'transient_for' Tip für \"%s\" zeigt auf sich selbst."
-
-#: ../ioncore/clientwin.c:380
-#, c-format
-msgid ""
-"Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" "
-"multi-parent brain damage?)"
-msgstr ""
-"Client Fenster \"%s\" hat einen fehlerhaften 'transient_for'-Tip "
-"(\"Erweiterte WM Tips\" *** Gehirnschaden?)"
-
-#: ../ioncore/clientwin.c:385
-#, c-format
-msgid "The transient_for window for \"%s\" is not on the same screen."
-msgstr "Das 'transient_for'-Fenster für \"%s\" ist nicht auf dem gleichen Schirm."
-
-#: ../ioncore/clientwin.c:405 ../ioncore/clientwin.c:492
-#: ../ioncore/clientwin.c:1554
-#, c-format
-msgid "Window %#x disappeared."
-msgstr "Fenster %#x verschwunden."
-
-#: ../ioncore/clientwin.c:512
-msgid "Unable to find a matching root window!"
-msgstr "Unmöglich ein passendes Wurzelfenster zu finden."
-
-#: ../ioncore/clientwin.c:547
-#, c-format
-msgid "Unable to manage client window %#x."
-msgstr "Unmöglich die Client Fenster %#x zu bearbeiten."
-
-#: ../ioncore/clientwin.c:597
-msgid "Changes is WM_TRANSIENT_FOR property are unsupported."
-msgstr "Änderung der 'ist WM_TRANSIENT_FOR' Eigenschaft wird nicht unterstützt."
-
-#
-#: ../ioncore/clientwin.c:874
-msgid "Client does not support the WM_DELETE protocol."
-msgstr "Client unterstützt nicht das WM_DELETE Protocol."
-
-#: ../ioncore/clientwin.c:1103 ../mod_ionws/ionws.c:76
-#: ../mod_floatws/floatws.c:103
-#, c-format
-msgid "Error reparenting %s."
-msgstr "Fehler wieder herstellen %s."
-
-#: ../ioncore/clientwin.c:1560
-msgid "Saved client window does not want to be managed."
-msgstr "Gespeichertes Client Fenster braucht nicht behandelt werden."
-
-#
-#: ../ioncore/colormap.c:96
-msgid "Unable to store colourmap watch info."
-msgstr "Unmöglich die 'colourmap' Überwachungsinformation zu speichern."
-
-#: ../ioncore/region.c:36
-msgid "Creating region with negative width or height!"
-msgstr "Gebiet mit negativer Breite oder Höhe erzeugt!"
-
-#: ../ioncore/region.c:84
-#, c-format
-msgid "Destroying object \"%s\" with client windows as children."
-msgstr "Zerstörtes Objekt \"%s\", mit Client Fenstern."
-
-#: ../ioncore/attach.c:80
-msgid "Unable to reparent."
-msgstr "Unmöglich wieder herzustellen."
-
-#: ../ioncore/attach.c:112 ../ioncore/frame-pointer.c:295
-#, c-format
-msgid "Attempt to make region %s manage its ancestor %s."
-msgstr "Versuche Bereich %s zu erstellen und seine Vorläufer %s zu behandeln."
-
-#
-#: ../ioncore/defer.c:93
-msgid "Object destroyed while deferred actions are still pending."
-msgstr "Objekt zerstört während zurückgestellte Aktionen noch bevorstehen."
-
-#: ../ioncore/manage.c:90
-msgid "Unable to find a screen for a new client window."
-msgstr "Konnte keinen Screen für ein neues Client Fenster finden."
-
-#: ../ioncore/manage.c:187
-#, c-format
-msgid "Unable to rescue \"%s\"."
-msgstr "Konnte \"%s\" nicht retten."
-
-#: ../ioncore/rootwin.c:222
-#, c-format
-msgid "Unable to redirect root window events for screen %d."
-msgstr "Die Ereignisse für das Wurzelfenster des Screens %d können nicht umgeleitet werden."
-
-#: ../ioncore/rootwin.c:316
-msgid "Xinerama sanity check failed; overlapping screens detected."
-msgstr "Xinerama Zustandsüberprüfung fehlgeschlagen; überlappende Screens gefunden."
-
-#: ../ioncore/rootwin.c:342
-msgid "Don't know how to get Xinerama information for multiple X root windows."
-msgstr "Weiß nicht wie die Xinerama Information für multiple X Wurzelfenster zu bekommen ist."
-
-#: ../ioncore/rootwin.c:378
-#, c-format
-msgid "Unable to setup Xinerama screen %d."
-msgstr "Konnte Xinerama Screen %d nicht einrichten."
-
-#: ../ioncore/rootwin.c:389
-#, c-format
-msgid "Unable to setup X screen %d."
-msgstr "Konnte X Screen %d nicht einrichten."
-
-#: ../ioncore/names.c:90
-#, c-format
-msgid "Corrupt instance number %s."
-msgstr "Unbrauchbare Instanznummer %s."
-
-#: ../ioncore/saveload.c:55
-#, c-format
-msgid "Unknown class \"%s\", cannot create region."
-msgstr "Unbekannte Klasse \"%s\", Bereich konnte nicht erzeugt werden."
-
-#: ../ioncore/saveload.c:124
-#, c-format
-msgid ""
-"There were errors loading layout. Backing up current layout savefile as\n"
-"%s.\n"
-"If you are _not_ running under a session manager and wish to restore your\n"
-"old layout, copy this backup file over the layout savefile found in the\n"
-"same directory while Ion is not running and after having fixed your other\n"
-"configuration files that are causing this problem. (Maybe a missing\n"
-"module?)\n"
-msgstr ""
-"Fehler beim Laden des Layouts. Sichere jetzige Layoutsicherungsdatei als\n"
-"%s.\n"
-"Wenn Sie KEINEN Sitzungsmanager gestartet haben, können sie ihr altes Layout wieder herstellen.\n"
-"Kopieren sie die Sicherungsdatei über die aktuelle Layoutsicherungsdatei welche im selben Verzeichnis\n"
-"zu finden ist.\n"
-"Ion kann neu gestartet werden, nachdem alle anderen Konfigurationsdateien überprüft wurden,\n"
-"welche zu dem Problem beführt haben. (Eventuell fehlende Module?)\n"
-
-#: ../ioncore/saveload.c:167
-msgid "Unable to get file for layout backup."
-msgstr "Konnte keine Datei für die Layoutsicherung finden."
-
-#: ../ioncore/saveload.c:171
-#, c-format
-msgid "Backup file %s already exists."
-msgstr "Sicherungsdatei %s ist bereits vorhanden."
-
-#: ../ioncore/saveload.c:177
-msgid "Failed backup."
-msgstr "Sicherung fehlgeschlagen."
-
-#
-#: ../ioncore/saveload.c:182
-msgid "Unable to initialise layout on any screen."
-msgstr "Konnte für keinen Screen ein Layout initialisieren."
-
-#: ../ioncore/saveload.c:202
-#, c-format
-msgid "Unable to get configuration for screen %d."
-msgstr "Konnte für Screen %d keine Konfiguration finden."
-
-#: ../ioncore/saveload.c:215
-msgid "Unable to save layout."
-msgstr "Konnte Layout nicht sichern."
-
-#: ../ioncore/frame.c:122
-msgid "Frame is not empty."
-msgstr "Frame ist nicht leer."
-
-#: ../ioncore/conf.c:134
-msgid "User directory can not be set."
-msgstr "Benutzerverzeichnis konnte nicht gesetzt werden."
-
-#: ../ioncore/conf.c:197
-msgid "Some bindmaps were empty, loading ioncore-efbb."
-msgstr "Einige 'bindmaps' sind leer, lade 'ioncore-efbb'."
-
-#: ../ioncore/fullscreen.c:100
-msgid "Failed to enter full screen mode."
-msgstr "Vollbildmode fehlgeschlagen."
-
-#: ../ioncore/fullscreen.c:158
-msgid ""
-"WClientWin failed to return from full screen mode; remaining manager or "
-"parent from previous location refused to manage us."
-msgstr ""
-"'WClientWin' konnte nicht aus dem Vollbildmode zurückkehren;"
-"Der vorhandene Manager oder der Elternteil der vorherigen Position verhinterten das."
-
-#
-#: ../ioncore/mplex.c:1247
-msgid "Invalid position setting."
-msgstr "Ungültige Positionseinstellung."
-
-#
-#: ../ioncore/mplex.c:1280
-msgid "Invalid action setting."
-msgstr "Ungültige Aktionseinstellung."
-
-#: ../ioncore/gr.c:119
-#, c-format
-msgid "Drawing engine %s is not registered!"
-msgstr "Zeichenfunktion %s ist nicht registriert."
-
-#: ../ioncore/gr.c:138
-#, c-format
-msgid "Unable to find brush for style '%s'."
-msgstr "Konnte Pinsel für Style '%s' nicht finden."
-
-#: ../ioncore/gr.c:409
-msgid "No drawing engines loaded, trying \"de\"."
-msgstr "Keine Zeichenfunktionen geladen, versuche \"de\"."
-
-#
-#: ../ioncore/hooks.c:219
-msgid "No function given."
-msgstr "Keine Funktion gegeben."
-
-#: ../mod_ionws/ionws.c:311
-msgid "Unable to create a node for status display."
-msgstr "Konnte keinen Knoten für die Statusanzeige erstellen."
-
-#: ../mod_ionws/ionws.c:323
-msgid "Unable to create new split for status display."
-msgstr "Konnte keine neu Teilung für die Statusanzeige erzeugen."
-
-#
-#: ../mod_ionws/ionws.c:742
-msgid "Frame not managed by the workspace."
-msgstr "Frame wird nicht durch den Arbeitsbereich behandelt."
-
-#
-#: ../mod_ionws/ionws.c:747
-msgid "Invalid direction parameter."
-msgstr "Unzulässiger Richtungsparameter."
-
-#
-#: ../mod_ionws/ionws.c:765
-msgid "Unable to split."
-msgstr "Unmöglich zu Teilen."
-
-#: ../mod_ionws/ionws.c:803
-msgid "Nil frame."
-msgstr "'NIL'(leeres) Frame"
-
-#: ../mod_ionws/ionws.c:807
-msgid "The frame is not managed by the workspace."
-msgstr "Das Frame wird nicht durch den Arbeitsbereich behandelt."
-
-#: ../mod_ionws/ionws.c:812
-msgid "Frame may not be destroyed."
-msgstr "Frame darf nicht zerstört werden."
-
-#: ../mod_ionws/ionws.c:817
-msgid "Failed to rescue managed objects."
-msgstr "Rettung der 'managed objects' fehlgeschlagen."
-
-#: ../mod_ionws/ionws.c:1028
-msgid "Nil parameter."
-msgstr " 'NIL' (leer) Parameter"
-
-#: ../mod_ionws/ionws.c:1033
-msgid "Manager doesn't match."
-msgstr "Manager passt nicht."
-
-#
-#: ../mod_ionws/ionws.c:1055
-msgid "Could not get split tree."
-msgstr "Kann Teilungsbaum nicht finden."
-
-#: ../mod_ionws/ionws.c:1076
-msgid "Workspace already has a status display node."
-msgstr "Arbeitsbereich besitzt schon eine Knoten für die Statusanzeige."
-
-#
-#: ../mod_ionws/ionws.c:1126
-msgid "Missing region parameters."
-msgstr "Fehlende Bereichsparameter."
-
-#: ../mod_ionws/ionws.c:1162 ../mod_ionws/splitfloat.c:783
-msgid "Invalid direction."
-msgstr "Ungültige Richtung."
-
-#
-#: ../mod_ionws/ionws.c:1236
-msgid "No split type given."
-msgstr "Kein Teilungstyp gegeben."
-
-#: ../mod_ionws/ionws.c:1249
-msgid "Unknown split type."
-msgstr "Unbekannter Teilungstype."
-
-#
-#
-#: ../mod_ionws/ionws.c:1289
-msgid "The workspace is empty."
-msgstr "Der Arbeitsbereich ist leer."
-
-#: ../mod_ionws/placement.c:97 ../mod_panews/placement.c:299
-#, c-format
-msgid ""
-"Ooops... could not find a region to attach client window to on workspace %s."
-msgstr "Ooops ... konnte keinen Bereich finden um das Client Fenster an den Arbeitsbereich %s einzufügen."
-
-#: ../mod_ionws/split.c:906
-msgid "REGION_RQGEOM_TRYONLY unsupported for status display."
-msgstr "'REGION_RQGEOM_TRYONLY' wird nicht unterstützt für die Statusanzeige."
-
-#
-#: ../mod_ionws/split.c:979
-msgid "Invalid node."
-msgstr "Ungültiger Knoten."
-
-#
-#: ../mod_ionws/split.c:1044
-msgid "Splitting the status display is not allowed."
-msgstr "Teilung der Statusanzeige ist nicht erlaubt."
-
-#: ../mod_ionws/split.c:1072 ../mod_ionws/splitfloat.c:896
-msgid "Unable to split: not enough free space."
-msgstr "Teilung nicht möglich: nicht genügend freier Speicher."
-
-#
-#: ../mod_ionws/split.c:1558
-msgid "Unable to move the status display out of way of transpose."
-msgstr "Es ist unmöglich die Statusanzeige so zu verschieben."
-
-#: ../mod_ionws/split.c:1722
-#, c-format
-msgid "Unable to get configuration for %s."
-msgstr "Konnte keine Konfiguration für \"%s\" finden."
-
-#: ../mod_ionws/split-stdisp.c:591 ../mod_ionws/split-stdisp.c:616
-msgid "Status display in bad split configuration."
-msgstr "Statusanzeige hat eine schlechte Teilungskonfiguration."
-
-#: ../mod_ionws/split-stdisp.c:657
-msgid "Status display badly located in split tree."
-msgstr "Statusanzeige liegt schlecht im Teilungsbaum."
-
-#: ../mod_floatws/floatws.c:351 ../mod_panews/panews.c:259
-msgid "Workspace may not be destroyed."
-msgstr "Arbeitsbereich kann nicht zerstört werden."
-
-#: ../mod_floatws/floatws.c:358
-msgid "Failed to rescue some client windows!"
-msgstr "Rettung einiger Client Fenster fehlgeschlagen."
-
-#: ../mod_floatws/floatws.c:370 ../mod_panews/panews.c:254
-msgid "Refusing to close non-empty workspace."
-msgstr "Schließen von 'nicht-leerem' Arbeitsbereich abgelehnt."
-
-#
-#: ../mod_floatws/floatws.c:462
-msgid "Failure to create a new frame."
-msgstr "Konnte kein neues Frame erzeugen."
-
-#
-#: ../mod_floatws/floatws.c:1037 ../mod_floatws/floatws.c:1115
-msgid "Region not managed by the workspace."
-msgstr "Bereich wird nicht behandelt durch diesen Arbeitsbereich."
-
-#: ../mod_floatws/floatws.c:1236
-msgid "No geometry specified."
-msgstr "Keine Geometrie angegeben."
-
-#: ../mod_floatws/placement.c:125
-#, c-format
-msgid "Unknown placement method \"%s\"."
-msgstr "Unbekannte Platzierungsmethode \"%s\"."
-
-#: ../mod_panews/panews.c:193
-msgid "Unable to re-initialise workspace. Destroying."
-msgstr "Konnte den Arbeitsbereich nicht neu initialisieren. Zerstört."
-
-#: ../mod_panews/placement.c:104 ../mod_panews/placement.c:108
-#: ../mod_panews/placement.c:175 ../mod_panews/placement.c:180
-#, c-format
-msgid "Malfunctioning placement hook; condition #%d."
-msgstr "Fehlfunktion der Platzierung; Zustand #%d."
-
-#: ../mod_query/fwarn.c:34
-msgid "Error:\n"
-msgstr "Fehler:\n"
-
-#
-#: ../mod_menu/menu.c:490
-msgid "Empty menu."
-msgstr "Leeres Menü."
-
-#
-#: ../mod_sm/sm.c:110
-msgid "Failed to set session directory."
-msgstr "Konnte Sitzungsverzeichnis nicht setzen."
-
-#: ../mod_sm/sm_session.c:85
-msgid "Too many ICE connections."
-msgstr "Zu viele 'ICE' Verbindungen."
-
-#: ../mod_sm/sm_session.c:227
-msgid "Failed to save session state"
-msgstr "Konnte Sitzungszustand nicht sichern."
-
-#: ../mod_sm/sm_session.c:246
-msgid "Failed to request save-yourself-phase2 from session manager."
-msgstr "Konnte die 'save-yourself-phase2' Anfrage des Sitzungsmanagers nicht gehandeln."
-
-#
-#: ../mod_sm/sm_session.c:295
-msgid "SESSION_MANAGER environment variable not set."
-msgstr "'SESSION_MANAGER' Umgebungsvariable nicht gesetzt."
-
-#: ../mod_sm/sm_session.c:300
-msgid "Session Manager: IceAddConnectionWatch failed."
-msgstr "Sitzungsmanager: 'IceAddConnectionWatch' fehlgeschlagen."
-
-#
-#: ../mod_sm/sm_session.c:325
-msgid "Unable to connect to the session manager."
-msgstr "Konnte keine Verbindung zu Sitzungsmanager aufbauen."
-
-#: ../mod_sp/main.c:137
-#, c-format
-msgid "Unable to create scratchpad for screen %d."
-msgstr "Konnte 'Scratchpad' (Schmirblock) für Screen %d nicht erstellen."
-
-#: ../de/init.c:41
-#, c-format
-msgid "Border attribute %s sanity check failed."
-msgstr "Überprüfung der Rahmeneigenschaft %s fehlgeschlagen."
-
-#: ../de/init.c:64
-#, c-format
-msgid "Unknown border style \"%s\"."
-msgstr "Unbekannter Rahmenstyle \"%s\"."
-
-#: ../de/init.c:96
-#, c-format
-msgid "Unable to allocate colour \"%s\"."
-msgstr "Konnte Farbe \"%s\" nicht zuweisen."
-
-#: ../de/init.c:160
-#, c-format
-msgid "Corrupt substyle table %d."
-msgstr "Zerstörte 'substyle' Tabelle %d"
-
-#: ../de/init.c:193
-#, c-format
-msgid "Unknown text alignment \"%s\"."
-msgstr "Unbekannte Textausrichtung \"%s\"."
-
-#: ../de/init.c:263
-#, c-format
-msgid "'based_on' for %s points back to the style itself."
-msgstr " 'based_on' für %s zeigt zurück auf den selben Style. "
-
-#: ../de/init.c:266
-#, c-format
-msgid "Unknown base style \"%s\"."
-msgstr "Unbekannter Basisstyle \"%s\"."
-
-#: ../de/font.c:47
-#, c-format
-msgid ""
-"Fontset for font pattern '%s' implements context dependent drawing, which is "
-"unsupported. Expect clutter."
-msgstr ""
-"Schriftart für Schriftmuster '%s' enthält fallspezifische Abhängigkeiten zum Zeichnen"
-"Dies wird nicht unterstützt. Erwartet 'clutter'."
-
-#: ../de/font.c:58
-#, c-format
-msgid "Could not load font \"%s\", trying \"%s\""
-msgstr "Konnte Schrift \"%s\" nicht laden, versuche \"%s\"."
-
-#: ../de/style.c:315
-#, c-format
-msgid "Style %s still in use [%d] but the module is being unloaded!"
-msgstr "Style %s wird derzeit benutzt [%d] aber das Modul ist nicht mehr geladen."
-
-#: ../ion/ion.c:41 ../pwm/pwm.c:41
-msgid "X display to use"
-msgstr "Benutze X Anzeige"
-
-#: ../ion/ion.c:44 ../pwm/pwm.c:44
-msgid "Configuration file"
-msgstr "Konfigurationsdatei"
-
-#: ../ion/ion.c:47 ../pwm/pwm.c:47
-msgid "Add directory to search path"
-msgstr "Addiere Verzeichnis zum Suchpfad "
-
-#: ../ion/ion.c:50 ../pwm/pwm.c:50
-msgid "Manage default root window/non-Xinerama screen only"
-msgstr "Behandle nur das vorgegebene Wurzelfenster/nicht-Xinerama."
-#: ../ion/ion.c:54
-msgid "Use Xinerama screen information (default: 1/yes)"
-msgstr "Benutze Xinerama Screen Information (Vorgabe: 1/ja)"
-
-#: ../ion/ion.c:57 ../pwm/pwm.c:57
-msgid "Ignored: not compiled with Xinerama support"
-msgstr "Ignoriert: keine Xinerama Unterstützung kompiliert."
-
-#: ../ion/ion.c:61 ../pwm/pwm.c:61
-msgid "Name of session (affects savefiles)"
-msgstr "Name der Sitzung (betrifft Sicherungsdateien)"
-
-#: ../ion/ion.c:64 ../pwm/pwm.c:64
-msgid "Session manager client ID"
-msgstr "Sitzungsmanager Client ID"
-
-#: ../ion/ion.c:67 ../pwm/pwm.c:67
-msgid "Do not create startup error log and display it with xmessage."
-msgstr "Erstelle keine Fehlerdateien während des Starts und zeige sie mit 'xmessage'. "
-
-#: ../ion/ion.c:71 ../pwm/pwm.c:71
-msgid "Show this help"
-msgstr "Zeige diese Hilfe"
-
-#: ../ion/ion.c:74 ../pwm/pwm.c:74
-msgid "Show program version"
-msgstr "Zeige Programmversion"
-
-#: ../ion/ion.c:77 ../pwm/pwm.c:77
-msgid "Show about text"
-msgstr "Zeige 'About' Text"
-
-#: ../ion/ion.c:92
-msgid "Could not get user configuration file directory."
-msgstr "Konnte das Verzeichnis mit den Benutzerkonfigurationsdateien nicht finden."
-
-#: ../ion/ion.c:106
-#, c-format
-msgid "%s/welcome.txt"
-msgstr "%s/welcome.de.txt"
-
-#: ../ion/ion.c:139 ../pwm/pwm.c:86
-#, c-format
-msgid ""
-"Usage: %s [options]\n"
-"\n"
-msgstr ""
-"Anwendung: %s [Optionen]\n"
-"\n"
-
-#: ../ion/ion.c:199 ../pwm/pwm.c:149
-msgid "Invalid parameter to -xinerama."
-msgstr "Ungültiger Parameter für '-xinerama'."
-
-#
-#: ../ion/ion.c:218 ../pwm/pwm.c:168
-msgid "Invalid command line."
-msgstr "Ungültige Kommandozeile."
-
-#: ../ion/ion.c:239
-msgid "Ion startup error log:\n"
-msgstr "Ion-Start Fehlerausgabe:\n"
-
-#: ../ion/ion.c:249 ../pwm/pwm.c:199
-msgid "Refusing to start due to encountered errors."
-msgstr "Start abgebrochen wegen aufgetretenen Fehlern."
-
-#: ../pwm/pwm.c:54
-msgid "Use Xinerama screen information (default: 0/no)"
-msgstr "Benutze Xinerama Screen Information (Vorgabe: 0/nein)"
-
-#: ../pwm/pwm.c:189
-msgid "PWM startup error log:\n"
-msgstr "PWM-Start Fehlerausgabe:\n"
-
-#: ../../libextl/readconfig.c:86
-msgid "$HOME not set"
-msgstr "Variable '$HOME' nicht gesetzt."
-
-#: ../../libextl/readconfig.c:113
-msgid "User directory not set. Unable to set session directory."
-msgstr ""
-"Benutzerverzeichnis nicht gesetzt."
-"Konnte Sitzungsverzeichnis nicht setzen."
-
-#: ../../libextl/readconfig.c:247
-#, c-format
-msgid "Falling back to %s."
-msgstr "Yritetään tiedostoa %s."
-
-#: ../../libextl/readconfig.c:441
-#, c-format
-msgid "Unable to create session directory \"%s\"."
-msgstr "Konntedas Sitzungsverzeichnis \"%s\" nicht erstellen."
-
-#: ../../libextl/luaextl.c:113
-msgid "Lua stack full."
-msgstr "Lua Stapelverarbeitung voll."
-
-#
-#: ../../libextl/luaextl.c:139
-msgid "Unknown Lua error."
-msgstr "Unbekannter Lua Fehler."
-
-#: ../../libextl/luaextl.c:456
-msgid "Stack trace:"
-msgstr "Stapelverfolgung:"
-
-#: ../../libextl/luaextl.c:463
-#, c-format
-msgid ""
-"\n"
-"(Unable to get debug info for level %d)"
-msgstr ""
-"\n"
-"(Konnte Debuginformation für Level %d nicht finden.)"
-
-#: ../../libextl/luaextl.c:481
-msgid ""
-"\n"
-" [Skipping unnamed C functions.]"
-msgstr ""
-"\n"
-" [Überspringe unbenannte C Funktionen.]"
-
-#: ../../libextl/luaextl.c:532
-msgid "Internal error."
-msgstr "Interner Fehler."
-
-#: ../../libextl/luaextl.c:551
-msgid "Unable to initialize Lua."
-msgstr "Konnte Lua nicht initialisieren."
-
-#: ../../libextl/luaextl.c:1277
-msgid ""
-"Too many return values. Use a C compiler that has va_copy to support more."
-msgstr ""
-"Zu viele Rückgabewerte. Benutzen Sie einen C Compiler der 'va_copy' benutzt."
-
-#: ../../libextl/luaextl.c:1295
-#, c-format
-msgid "Invalid return value (expected '%c', got lua type \"%s\")."
-msgstr ""
-"Ungültiger Rückgabewert (erwartet '%c', bekommener Luatype \"%s\")."
-
-#: ../../libextl/luaextl.c:1330 ../../libextl/luaextl.c:1594
-msgid "Stack full."
-msgstr "Stapel voll."
-
-#: ../../libextl/luaextl.c:1570
-msgid "L1 call handler upvalues corrupt."
-msgstr "L1 Abruf 'upvalues' fehlerhaft."
-
-#: ../../libextl/luaextl.c:1575
-msgid "Called function has been unregistered."
-msgstr "Aufgerufene Funktion wurde noicht registriert."
-
-#: ../../libextl/luaextl.c:1587
-#, c-format
-msgid "Attempt to call an unsafe function \"%s\" in restricted mode."
-msgstr "Versuchte eine unsichere Funktion \"%s\" im begrenzten Modus aufzurufen."
-
-#: ../../libextl/luaextl.c:1603
-#, c-format
-msgid ""
-"Argument %d to %s is of invalid type. (Argument template is '%s', got lua "
-"type %s)."
-msgstr ""
-"Argument %d von %s hat einen ungültigen Type (Argumentvorgabe ist '%s', "
-"von Lua kam '%s'.)"
-
-#: ../../libextl/luaextl.c:1782
-#, c-format
-msgid ""
-"Function '%s' has more parameters than the level 1 call handler can handle"
-msgstr ""
-"Funktion %s hat mehr Parameter als der Level 1 Handler bearbeiten kann "
-
-#
-#: ../../libextl/luaextl.c:2199
-msgid "Maximal serialisation depth reached."
-msgstr "Maximum der Serialisierungstiefe erreicht."
-
-#: ../../libextl/luaextl.c:2220
-#, c-format
-msgid "Unable to serialise type %s."
-msgstr "Konnte den Type %s nicht serialisieren."
-
-#: ../../libextl/luaextl.c:2251
-msgid "-- This file has been generated by Ion. Do not edit.\n"
-msgstr "-- Dies Datei wurde von Ion erzeugt. Bitte nicht verändern.\n"
-
-#: ../../libextl/misc.c:17
-#, c-format
-msgid ""
-"Type checking failed in level 2 call handler for parameter %d (got %s, "
-"expected %s)."
-msgstr ""
-"Type Überprüfung im Level 2 Handler für den Parameter #%d fehlgeschlagen"
-"(gekam %s, erwartet %s)."
-
-#: ../etc/cfg_floatws.lua:34
-msgid "Lower the frame."
-msgstr "Frame in den Hintergrund."
-
-#: ../etc/cfg_bindings.lua:171
-msgid "Display frame context menu."
-msgstr "Anzeige Frame Kontexmenü"
-
-#
-#: ../etc/cfg_ionws.lua:44
-msgid "Flip at root"
-msgstr "An der Wurzel drehen"
-
-#
-#: ../etc/cfg_bindings.lua:43
-msgid "Go to n:th screen on multihead setup."
-msgstr "Gehe zu n'ten Screen bei 'multihead' Aufbau."
-
-#: ../ext_statusbar/ext_statusbar.lua:308
-msgid "Failed to create statusbar."
-msgstr "Konnte Statusbar nicht erzeugen."
-
-#: ../pwm/cfg_pwm_menus.lua:13 ../etc/cfg_menus.lua:10
-msgid "Help"
-msgstr "Hilfe"
-
-#: ../mod_query/mod_query.lua:566
-msgid "SSH to:"
-msgstr "SSH to:"
-
-#: ../etc/cfg_menus.lua:28
-msgid "Restart"
-msgstr "Neustart"
-
-#: ../mod_menu/mod_menu.lua:231
-msgid "Cannot save selection."
-msgstr "Konnte Auswahl nicht speichern."
-
-#: ../etc/cfg_bindings.lua:206
-msgid "End the resize mode."
-msgstr "Beende den Anpassungsmode."
-
-#
-#
-#: ../etc/cfg_ionws.lua:48 ../etc/cfg_ionws.lua:58
-msgid "Vertically"
-msgstr "Vertikal"
-
-#: ../ioncore/ioncore-bindings.lua:34
-msgid "Invalid guard %s."
-msgstr "Ungültiger Wächter %s."
-
-#: ../etc/cfg_bindings.lua:109
-msgid "Query for Lua code to execute."
-msgstr "Anfrage um Lua Code auszuführen."
-
-#
-#: ../etc/cfg_bindings.lua:47
-msgid "Go to next/previous screen on multihead setup."
-msgstr "Gehe zum nächsten/vorherigen Screen bei 'multihead' Aufbau."
-
-#: ../mod_query/mod_query.lua:344
-msgid "none"
-msgstr "keine"
-
-#: ../etc/cfg_bindings.lua:219
-msgid "Shrink in specified direction."
-msgstr "Verkleinern in angegebener Richtung."
-
-#: ../etc/cfg_bindings.lua:160
-msgid "Maximize the frame horizontally/vertically."
-msgstr "Maximiere das Frame horizontal/vertikal."
-
-#: ../etc/cfg_bindings.lua:156
-msgid "Move current object within the frame left/right."
-msgstr ""
-"Bewege das aktuelle Objekt im Frame nach links/rechts."
-
-#: ../etc/cfg_ionws.lua:12
-msgid "Go to frame above/below/right/left of current frame."
-msgstr ""
-"Gehe zu Frame oben/unten/rechts/links"
-"Bezogen auf aktuelles Frame"
-
-#: ../ext_statusbar/ext_statusbar.lua:289
-msgid "Screen not found."
-msgstr "Screen nicht gefunden."
-
-#: ../etc/cfg_bindings.lua:182
-msgid "Resize the frame."
-msgstr "Anpassen des Frame."
-
-#: ../etc/cfg_bindings.lua:189
-msgid "Move objects between frames by dragging and dropping the tab."
-msgstr "Bewege Objekte zwischen Frames durch 'ziehen/fallen lassen' des Reiters."
-
-#: ../mod_query/mod_query.lua:99
-msgid "Could not find %s"
-msgstr "Ei löydettyä %s:ää."
-
-#: ../ext_statusbar/ext_statusbar.lua:295
-msgid "Screen already has an stdisp. Refusing to create a statusbar."
-msgstr "Screen hat bereits ein 'stdisp'. Erstellen der Statusbar wurde abgelehnt."
-
-#: ../etc/cfg_bindings.lua:112
-msgid "Query for host to connect to with SSH."
-msgstr "Anfrage zur Verbindung mit SSH."
-
-#
-#: ../etc/cfg_bindings.lua:229
-msgid "Move in specified direction."
-msgstr "Bewegt in festgelegte Richtung"
-
-#
-#: ../ext_statusbar/ext_statusbar.lua:27
-msgid "mail"
-msgstr "Post"
-
-#: ../mod_query/mod_query.lua:807
-msgid ""
-"\n"
-"Transients:\n"
-msgstr ""
-"\n"
-"Flüchtige:\n"
-
-#: ../etc/cfg_menu.lua:21
-msgid "Select next/previous menu entry."
-msgstr "Wähle nächsten/vorherigen Menüeintrag."
-
-#: ../ioncore/ioncore-luaext.lua:30
-msgid "Recursive table - unable to deepcopy"
-msgstr "Rekursive Tabelle - unmöglich zu kopieren."
-
-#
-#: ../etc/cfg_bindings.lua:209
-msgid "Grow in specified direction."
-msgstr "Wachse in angegebener Richtung."
-
-#: ../ioncore/ioncore-bindings.lua:68
-msgid "Invalid command"
-msgstr "Ungültiges Kommando"
-
-#: ../mod_query/mod_query.lua:189 ../mod_menu/mod_menu.lua:245
-msgid "Too much result data"
-msgstr "Zu viele Ergebnisdaten"
-
-#: ../mod_query/mod_query.lua:344
-msgid "Workspace type (%s):"
-msgstr "Type des Arbeitsbereichs (%s):"
-
-#: ../etc/cfg_bindings.lua:36
-msgid "Go to previous active object."
-msgstr "Gehe zu vorherigem aktivem Objekt"
-
-#
-#: ../etc/cfg_query.lua:67
-msgid "Clear mark/cancel selection."
-msgstr "Lösche Markierung/Abbruch Auswahl."
-
-#: ../mod_query/mod_query.lua:772
-msgid "No entry '%s'"
-msgstr "Kein Eintrag '%s'."
-
-#
-#
-#: ../etc/cfg_bindings.lua:90
-msgid "Toggle fullscreen mode of current client window."
-msgstr "Schalte das aktuelle Client Fenster in den Vollbildmode."
-
-#: ../etc/cfg_bindings.lua:103
-msgid "Query for manual page to be displayed."
-msgstr "Anfrage um 'Manual' Seiten anzuzeigen."
-
-#: ../etc/cfg_bindings.lua:51
-msgid "Show the Ion manual page."
-msgstr "Zeige die Ion 'Manual' Seite."
-
-#: ../etc/cfg_bindings.lua:60
-msgid "Display the main menu."
-msgstr "Zeige das Hauptmenü."
-
-#
-#: ../etc/cfg_bindings.lua:54
-msgid "Run a terminal emulator."
-msgstr "Starte einen Terminal."
-
-#: ../etc/cfg_bindings.lua:121
-msgid "Query for workspace to go to or create a new one."
-msgstr "Anfrage um auf einen Arbeitsbereich zu wechseln oder einen neuen zu erzeugen."
-
-#: ../etc/cfg_menus.lua:38
-msgid "Kill"
-msgstr "Zerstören"
-
-#: ../pwm/cfg_pwm_menus.lua:25 ../etc/cfg_menus.lua:37
-msgid "Close"
-msgstr "Schließen"
-
-#: ../mod_query/mod_query.lua:381
-msgid "Go to or create workspace:"
-msgstr "Erzeuge einen Arbeitsbereich:"
-
-#: ../etc/cfg_query.lua:35
-msgid "Delete one word forward/backward."
-msgstr "Lösche ein Wort vorwärts/rückwärts."
-
-#: ../etc/cfg_query.lua:17
-msgid "Go to end/beginning."
-msgstr "Gehe zum Ende/Anfang."
-
-#
-#: ../etc/cfg_ionws.lua:43
-msgid "Transpose"
-msgstr "Vertauschen"
-
-#: ../etc/cfg_bindings.lua:152
-msgid "Switch to next/previous object within the frame."
-msgstr "Wechsel zum nächsten/vorherigen Objekt im Frame"
-
-#: ../mod_query/mod_query.lua:402
-msgid "Restart Ion (y/n)?"
-msgstr "Neustart Ion (y/n)?"
-
-#: ../mod_query/mod_query.lua:724
-msgid "Lua code: "
-msgstr "Lua Code:"
-
-#: ../mod_query/mod_query.lua:367
-msgid "Attach window:"
-msgstr "Fenster verknüpfen:"
-
-#: ../etc/cfg_bindings.lua:186 ../etc/cfg_floatws.lua:37
-msgid "Move the frame."
-msgstr "Gehe zu Frame."
-
-#: ../pwm/cfg_pwm_menus.lua:11 ../etc/cfg_menus.lua:8
-msgid "Programs"
-msgstr "Programme"
-
-#: ../etc/cfg_query.lua:23
-msgid "Skip one word forward/backward."
-msgstr "Überspringe ein Wort vorwärts/rückwärts."
-
-#: ../mod_query/mod_query.lua:738
-msgid "Unknown menu %s."
-msgstr "Unbekanntes Menü %s."
-
-#: ../etc/cfg_floatws.lua:12
-msgid "Backwards-circulate focus and raise the newly focused frame."
-msgstr "Rückwärts laufender Fokus und zeige fokussiertes Frame."
-
-#: ../etc/cfg_menus.lua:44
-msgid "Window info"
-msgstr "Fensterinformation"
-
-#
-#: ../etc/cfg_query.lua:58
-msgid "Set mark/begin selection."
-msgstr "Setze Markierungs/Anfangs - Auswahl."
-
-#: ../etc/cfg_menus.lua:30
-msgid "Restart TWM"
-msgstr "Neustart TWM"
-
-#: ../etc/cfg_ionws.lua:9
-msgid "Split current frame vertically."
-msgstr "Teile aktuelles Frame vertikal."
-
-#
-#
-#: ../etc/cfg_bindings.lua:57
-msgid "Create a new workspace of chosen default type."
-msgstr "Erzeuge einen neuen Arbeitsbereich mit ausgewähltem Vorgabetype."
-
-#
-#: ../etc/cfg_floatws.lua:29
-msgid "Raise the frame."
-msgstr "Bringe Frame nach vorne."
-
-#: ../etc/cfg_floatws.lua:46
-msgid "(Un)stick"
-msgstr "anheften/ablösen"
-
-#: ../mod_query/mod_query.lua:287 ../mod_query/mod_query.lua:297
-msgid "Could not find client window %s."
-msgstr "Konnte Client Fenster %s nicht finden."
-
-#: ../etc/cfg_query.lua:82
-msgid "Close the query/message box, not executing bound actions."
-msgstr "Schließe die Anfrage/Message Box und führe keine daran gebundenen Aktionen aus."
-
-#
-#: ../etc/cfg_bindings.lua:168
-msgid "Query for a client window to attach to active frame."
-msgstr "Anfrage für ein Client Fenster um sich mit einem aktivem Frame zu verbinden "
-
-#: ../mod_query/mod_query.lua:488
-msgid "Run:"
-msgstr "Starte:"
-
-#
-#: ../etc/cfg_panews.lua:11
-msgid "Resize the area."
-msgstr "Verändere die Ansicht."
-
-#
-#: ../etc/cfg_bindings.lua:95
-msgid "Kill client owning current client window."
-msgstr "Beende aktuelles Client Fenster."
-
-#: ../mod_query/mod_query.lua:595
-msgid "Manual page (%s):"
-msgstr "Handbuch für (%s):"
-
-#
-#: ../etc/cfg_bindings.lua:124
-msgid "Query for a client window to go to."
-msgstr "Anfrage wohin ein Client Fenster geschickt werden soll."
-
-#
-#: ../etc/cfg_ionws.lua:39
-msgid "Destroy frame"
-msgstr "Zerstöre Frame"
-
-#: ../mod_query/mod_query.lua:339
-msgid "Unknown error"
-msgstr "Unbekannter Fehler"
-
-#: ../etc/cfg_bindings.lua:175 ../etc/cfg_panews.lua:8
-msgid "Begin move/resize mode."
-msgstr "Beginne Bewegungs/Veränderungs - Modus."
-
-#: ../etc/cfg_bindings.lua:136
-msgid "Tag current object within the frame."
-msgstr "Markiere aktuelles Objekt im Frame."
-
-#: ../etc/cfg_bindings.lua:140
-msgid "Switch to n:th object within the frame."
-msgstr "Wechsel zum n'ten Objekt im Frame."
-
-#: ../etc/cfg_bindings.lua:203
-msgid "Cancel the resize mode."
-msgstr "Abbruch des Veränderungsmodus."
-
-#: ../build/mkman.lua:196
-msgid "%s %s"
-msgstr "%s %s"
-
-#: ../etc/cfg_query.lua:27
-msgid "Delete next character."
-msgstr "Lösche nächsten Buchstaben."
-
-#: ../mod_query/mod_query.lua:356
-msgid "Go to window:"
-msgstr "Gehe zu Fenster:"
-
-#: ../build/mkman.lua:182
-msgid "drag"
-msgstr "ziehen"
-
-#: ../build/mkman.lua:181
-msgid "click"
-msgstr "anklicken"
-#: ../build/mkman.lua:180
-msgid "press"
-msgstr "drücken"
-
-#: ../etc/cfg_menu.lua:27
-msgid "Clear the menu's typeahead find buffer."
-msgstr "Lösche den Menüpuffer."
-
-#: ../etc/cfg_ionws.lua:47
-msgid "Split"
-msgstr "Teilung"
-
-#
-#: ../etc/cfg_bindings.lua:98
-msgid ""
-"Send next key press to current client window. Some programs may not allow "
-"this by default."
-msgstr ""
-"Sende den nächsten Tastendruck zum aktuellen Client Fenster. "
-"Einige Programme unterstützen dies nicht in ihrer Voreinstellung."
-
-#: ../etc/cfg_menu.lua:11
-msgid "Close the menu."
-msgstr "Schließe das Menü."
-
-#: ../etc/cfg_query.lua:87
-msgid "Scroll the message or completions up/down."
-msgstr "Verschiebe die Nachricht oder Vervollständigung nach oben/unten."
-
-#: ../etc/cfg_query.lua:74
-msgid "Close the query and execute bound action."
-msgstr "Schließe die Anfrage und führe die daran gebundene Aktion aus."
-
-#
-#: ../etc/cfg_bindings.lua:31
-msgid "Switch to next/previous object within current screen."
-msgstr "Wechsel zum nächsten/vorherigen Objekt im aktuellen Screen."
-
-#: ../etc/cfg_query.lua:39
-msgid "Delete to end of line."
-msgstr "Lösche bis zum ende der Zeile."
-
-#: ../pwm/cfg_pwm_menus.lua:14 ../etc/cfg_menus.lua:11
-msgid "About Ion"
-msgstr "Über Ion"
-
-#: ../mod_query/mod_query.lua:804
-msgid ""
-"Title: %s\n"
-"Class: %s\n"
-"Role: %s\n"
-"Instance: %s\n"
-"XID: 0x%x"
-msgstr ""
-"Titel: %s\n"
-"Klasse(class): %s\n"
-"Rolle(role): %s\n"
-"Instanz(instance): %s\n"
-"XID: 0x%x"
-
-#
-#: ../etc/cfg_query.lua:61
-msgid "Cut selection."
-msgstr "Ausschneiden."
-
-#: ../etc/cfg_query.lua:53
-msgid "Paste from the clipboard."
-msgstr "Einfügen aus Clipboard."
-
-#
-#: ../etc/cfg_query.lua:45
-msgid "Select next/previous (matching) history entry."
-msgstr "Auswahl des nächsten/vorherigen (Treffers) 'History' Eintrags."
-
-#: ../etc/cfg_menus.lua:43
-msgid "Clear tags"
-msgstr "Lösche Markierungen"
-
-#: ../etc/cfg_query.lua:42
-msgid "Delete the whole line."
-msgstr "Lösche die ganze Zeile."
-
-#: ../etc/cfg_query.lua:71
-msgid "Try to complete the entered text."
-msgstr "Versuche den eingegebenen Text zu komplettieren."
-
-#: ../etc/cfg_query.lua:31
-msgid "Delete previous character."
-msgstr "Lösche vorheriges Zeichen."
-
-#: ../mod_query/mod_query.lua:299
-msgid "Cannot attach: different root windows."
-msgstr "Keine Verknüpfung: unterschiedliche Wurzelfenster."
-
-#: ../build/mkman.lua:183
-msgid "double click"
-msgstr "Doppelklick"
-
-#: ../etc/cfg_query.lua:11
-msgid "Move one character forward/backward."
-msgstr "Bewege ein Zeichen vorwärts/rückwärts."
-
-#: ../etc/cfg_menus.lua:29
-msgid "Restart PWM"
-msgstr "Neustart PWM"
-
-#: ../etc/cfg_bindings.lua:115
-msgid "Query for file to edit."
-msgstr "Anfrage um eine Datei zu bearbeiten."
-
-#
-#: ../etc/cfg_bindings.lua:39
-msgid "Clear all tags."
-msgstr "Lösche alle Markierungen."
-
-#: ../etc/cfg_bindings.lua:178
-msgid "Switch the frame to display the object indicated by the tab."
-msgstr "Wechsle das Frame um das Objekt anzuzeigen welches durch den Reiter angegeben ist."
-
-#
-#
-#: ../etc/cfg_ionws.lua:50 ../etc/cfg_ionws.lua:60
-msgid "Horizontally"
-msgstr "Horizontal"
-
-#: ../pwm/cfg_pwm_menus.lua:16 ../pwm/cfg_pwm_menus.lua:24
-msgid "New"
-msgstr "Neu"
-
-#: ../mod_query/mod_query.lua:410
-msgid "Frame name:"
-msgstr "Framename:"
-
-#
-#: ../etc/cfg_bindings.lua:18
-msgid ""
-"Switch to n:th object (workspace, full screen client window) within current "
-"screen."
-msgstr ""
-"Wechsle zum n'ten Objekt (Arbeitsbereich, Vollbild Fenster) im aktuellen Arbeitsbereich."
-
-#: ../etc/cfg_bindings.lua:64
-msgid "Display the window list menu."
-msgstr "Zeige das Menü mit der Fensterliste."
-
-#: ../etc/cfg_floatws.lua:26
-msgid "Toggle shade mode"
-msgstr "Wechsle in den Schattenmodus"
-
-#: ../mod_query/mod_query.lua:393
-msgid "Exit Ion/Shutdown session (y/n)?"
-msgstr "Beende Ion/Schließe Sitzung (y/n)?"
-
-#: ../etc/cfg_floatws.lua:15
-msgid "Raise/lower active frame."
-msgstr "vorbringen/zurücklegen des aktiven Frames"
-
-#: ../mod_menu/mod_menu.lua:235
-msgid "Save look selection in %s?"
-msgstr "Sichere Aussehen in %s?"
-
-#: ../etc/cfg_bindings.lua:82
-msgid "Close current object."
-msgstr "Schließe aktuelles Objekt."
-
-#
-#: ../etc/cfg_query.lua:64
-msgid "Copy selection."
-msgstr "Kopiere Auswahl."
-
-#: ../etc/cfg_bindings.lua:164
-msgid "Attach tagged objects to this frame."
-msgstr "Verknüpfe markierte Objekte mit diesem Frame."
-
-#: ../etc/cfg_ionws.lua:57
-msgid "Floating split"
-msgstr "Fließende Teilung"
-
-#: ../mod_query/mod_query.lua:768
-msgid "%s menu:"
-msgstr "menu: %s"
-
-#: ../ext_statusbar/ext_statusbar.lua:318
-msgid "Failed to create a timer for statusbar."
-msgstr "Erzeugen des Timers für die Statusbar fehlgeschlagen."
-
-#: ../etc/cfg_ionws.lua:52 ../etc/cfg_ionws.lua:62
-msgid "Vertically at root"
-msgstr "Vertikal an der Wurzel"
-
-#
-#
-#: ../etc/cfg_menu.lua:16
-msgid "Activate current menu entry."
-msgstr "Aktiviere aktuellen Menüeintrag."
-
-#: ../ioncore/ioncore-efbb.lua:12
-msgid ""
-"Making the following minimal emergency mappings:\n"
-" F2 -> xterm\n"
-" F11 -> restart\n"
-" F12 -> exit\n"
-" Mod1+C -> close\n"
-" Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-msgstr ""
-"Erstelle die folgenden minimalen Rettungseinstellungen:\n"
-" F2 -> xterm\n"
-" F11 -> Neustart\n"
-" F12 -> Beenden\n"
-" Mod1+C -> Schließen\n"
-" Mod1+K P/N -> nächstes/vorheriges Frame\n"
-
-#
-#: ../etc/cfg_ionws.lua:45
-msgid "Transpose at root"
-msgstr "Vertausche an der Wurzel"
-
-#: ../pwm/cfg_pwm_menus.lua:17 ../etc/cfg_menus.lua:12
-msgid "Styles"
-msgstr "Aussehen ändern"
-
-#: ../etc/cfg_bindings.lua:106
-msgid "Query for command line to execute."
-msgstr "Anfrage um Kommandozeile auszuführen."
-
-#: ../mod_query/mod_query.lua:323
-msgid "Unable to create workspace: no screen."
-msgstr "Unmöglich Arbeitsbereich zu erzeugen: kein Screen."
-
-#: ../ext_statusbar/ext_statusbar.lua:27
-msgid "load"
-msgstr "lade"
-
-#
-#: ../etc/cfg_ionws.lua:42
-msgid "Flip"
-msgstr "Umdrehen"
-
-#: ../etc/cfg_ionws.lua:41
-msgid "Flip&transpose"
-msgstr "Umdrehen und Vertauschen"
-
-#: ../pwm/cfg_pwm_menus.lua:12 ../etc/cfg_menus.lua:9
-msgid "Lock screen"
-msgstr "Sperre Screen"
-
-#: ../mod_query/mod_query.lua:449
-msgid "Edit file:"
-msgstr "Bearbeite Datei:"
-
-#: ../etc/cfg_menus.lua:19
-msgid "XTerm"
-msgstr "XTerm"
-
-#: ../build/mkman.lua:198
-msgid "%s %s at %s"
-msgstr "%s %s auf %s"
-
-#
-#: ../etc/cfg_bindings.lua:85
-msgid ""
-"Nudge current client window. This might help with some programs' resizing "
-"problems."
-msgstr ""
-"Anstupsen des aktuellen Fensters. Dies könnte helfen bei einigen Programmen "
-" (xterm) mit Darstellungsproblemen."
-
-#: ../etc/cfg_ionws.lua:22
-msgid "Destroy current frame."
-msgstr "Zerstöre aktuelles Frame."
-
-#: ../ioncore/ioncore-bindings.lua:53
-msgid "Error in command string: "
-msgstr "Fehler in Kommandozeichenkette: "
-
-#: ../etc/cfg_ionws.lua:19
-msgid "Split current frame horizontally."
-msgstr "Teile aktuelles Frame horizontal."
-
-#: ../etc/cfg_menus.lua:42
-msgid "Attach tagged"
-msgstr "Markierte Objekte verknüpfen"
-
-#: ../etc/cfg_ionws.lua:54 ../etc/cfg_ionws.lua:64
-msgid "Horizontally at root"
-msgstr "Horizontal an der Wurzel"
-
-#: ../etc/cfg_menus.lua:40
-msgid "(Un)tag"
-msgstr "Markieren"
-
-#: ../mod_query/mod_query.lua:459
-msgid "View file:"
-msgstr "Zeige Datei:"
-
-#: ../mod_query/mod_query.lua:421
-msgid "Workspace name:"
-msgstr "Name des Arbeitsbereichs:"
-
-#: ../etc/cfg_menus.lua:31
-msgid "Exit"
-msgstr "Beenden"
-
-#: ../etc/cfg_menus.lua:27
-msgid "Save"
-msgstr "Speichern"
-
-#
-#: ../pwm/cfg_pwm_menus.lua:15
-msgid "Workspaces"
-msgstr "Arbeitsbereiche"
-
-#: ../etc/cfg_menus.lua:20
-msgid "Mozilla Firefox"
-msgstr "Mozilla Firefox"
-
-#: ../ioncore/ioncore-bindings.lua:45
-msgid "Error compiling guard: %s"
-msgstr "Fehler Erstellungswächter: %s"
-
-#: ../mod_menu/mod_menu.lua:271
-msgid "Refresh list"
-msgstr "Aktualisiere Liste"
-
-#: ../etc/cfg_floatws.lua:9
-msgid "Circulate focus and raise the newly focused frame."
-msgstr "Rückwärts laufender Fokus und zeige fokussiertes Frame."
-
-#
-#: ../etc/cfg_menus.lua:21
-msgid "Run..."
-msgstr "Starte..."
-
-#: ../etc/cfg_bindings.lua:118
-msgid "Query for file to view."
-msgstr "Anfrage um Datei anzuzeigen."
-
-#: ../mod_query/mod_query.lua:511
-msgid "Failed to open ~/.ssh/known_hosts"
-msgstr "Konnte ~/.ssh/known_hosts nicht öffnen."
-
-#: ../pwm/cfg_pwm_menus.lua:18 ../etc/cfg_menus.lua:13
-msgid "Session"
-msgstr "Sitzung"
-
-#: ../pwm/cfg_pwm_menus.lua:27
-msgid "List"
-msgstr "Anzeige"
-
-#~ msgid "Vertically/root"
-#~ msgstr "Pystysuunnassa juuressa"
-
-#
-#
-#~ msgid "Horizontally/root"
-#~ msgstr "Vaakasuunnassa juuressa"
-
-#~ msgid "Transpose parent"
-#~ msgstr "Käännä vanhempi"
-
-#~ msgid "Flip parent"
-#~ msgstr "Peilaa vanhempi"
msgstr ""
"Project-Id-Version: Ion3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-11-11 17:36+0200\n"
+"POT-Creation-Date: 2007-04-22 13:13+0300\n"
"PO-Revision-Date: 2004-07-31 23:50+0300\n"
"Last-Translator: Tuomo Valkonen <tuomov at iki.fi>\n"
"Language-Team: none\n"
msgstr "Ajan pyyntö X-palvelimelta epäonnistui."
#
-#: ../ioncore/exec.c:177
+#: ../ioncore/exec.c:186
msgid "Not saving state: running under session manager."
msgstr "Tilaa ei talleteta, koska olemme istunnonhallinnan alaisia."
msgid "Invalid arguments."
msgstr "Virheelliset parametrit."
-#: ../ioncore/screen.c:298
-msgid "act: "
-msgstr "act: "
-
#
-#: ../ioncore/screen.c:481
-msgid "Only workspace may not be destroyed."
-msgstr "Ainoata työpöytää ei voi tuhota."
+#: ../ioncore/screen.c:385
+msgid "Only workspace may not be destroyed/detached."
+msgstr "Ainoata työpöytää ei voi tuhota/irroitaa."
#
-#: ../ioncore/screen.c:489
+#: ../ioncore/screen.c:396
msgid "Screens may not be destroyed."
msgstr "Näyttöjä ei voi tuhota."
-#: ../ioncore/screen.c:525
+#: ../ioncore/screen.c:432
msgid "Invalid offset."
msgstr "Virheellinen poikkeama."
-#: ../ioncore/screen.c:568
+#: ../ioncore/screen.c:471
#, c-format
msgid "Unable to create a workspace on screen %d."
msgstr "Työpöydän luonti ruudulle %d epäonnistui."
-#: ../ioncore/sizehint.c:151
+#: ../ioncore/sizehint.c:157
msgid "Invalid client-supplied width/height increment."
msgstr "Asiakkaan ilmoittama pysty/vaakalisäys koolle on virheellinen."
-#: ../ioncore/sizehint.c:159
+#: ../ioncore/sizehint.c:165
msgid "Invalid client-supplied aspect-ratio."
msgstr "Asiakkaan ilmoittama sivusuhde on virheellinen."
-#: ../ioncore/ioncore.c:74
+#: ../ioncore/ioncore.c:78
msgid ""
"This program is free software; you can redistribute it and/or\n"
"modify it under the terms of the GNU Lesser General Public\n"
"hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen.\n"
"Katso LGPL lisenssistä lisää yksityiskohtia.\n"
-#: ../ioncore/ioncore.c:155
+#: ../ioncore/ioncore.c:159
msgid "No encoding given in LC_CTYPE."
msgstr "LC_CTYPE ei kerro enkoodausta."
-#: ../ioncore/ioncore.c:437
+#: ../ioncore/ioncore.c:470
#, c-format
msgid "Could not connect to X display '%s'"
msgstr "Yhteydenotto X-palvelimeen '%s' epäonnistui."
-#: ../ioncore/ioncore.c:489
+#: ../ioncore/ioncore.c:522
msgid "Could not find a screen to manage."
msgstr "Yhtään hallittavissa olevaa juuri-ikkunaa ei löytynyt."
msgid "Failed to create input context."
msgstr "Syöttökontekstin luonti epäonnistui."
-#: ../ioncore/clientwin.c:411
+#: ../ioncore/clientwin.c:379
#, c-format
msgid "The transient_for hint for \"%s\" points to itself."
msgstr "Ikkunan \"%s\" transient_for neuvo osoittaa itseensä."
-#: ../ioncore/clientwin.c:415
+#: ../ioncore/clientwin.c:383
#, c-format
msgid ""
"Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" "
"multi-parent brain damage?)"
msgstr "Ikkunan \"%s\" transient_for neuvo on rikki."
-#: ../ioncore/clientwin.c:420
+#: ../ioncore/clientwin.c:388
#, c-format
msgid "The transient_for window for \"%s\" is not on the same screen."
msgstr "Ikkunan \"%s\" transient_for neuvo osoittaa eri näytölle."
-#: ../ioncore/clientwin.c:440 ../ioncore/clientwin.c:527
-#: ../ioncore/clientwin.c:1300
+#: ../ioncore/clientwin.c:408 ../ioncore/clientwin.c:496
+#: ../ioncore/clientwin.c:1292
#, c-format
msgid "Window %#x disappeared."
msgstr "Ikkuna %#x katosi."
-#: ../ioncore/clientwin.c:547
+#: ../ioncore/clientwin.c:516
msgid "Unable to find a matching root window!"
msgstr "Vastaavaa juuri-ikkunaa ei löytynyt."
-#: ../ioncore/clientwin.c:582
+#: ../ioncore/clientwin.c:555
#, c-format
msgid "Unable to manage client window %#x."
msgstr "Asiakasikkunan %x hallittavaksi saattaminen epäonnistui."
-#: ../ioncore/clientwin.c:633
+#: ../ioncore/clientwin.c:604
msgid "Changes is WM_TRANSIENT_FOR property are unsupported."
msgstr "Muutoksia WM_TRANSIENT_FOR ominaisuudessa ei tueta."
#
-#: ../ioncore/clientwin.c:809
+#: ../ioncore/clientwin.c:776
msgid "Client does not support the WM_DELETE protocol."
msgstr "Asiakasikkuna ei tue WM_DELETE-protokollaa."
-#: ../ioncore/clientwin.c:1306
+#: ../ioncore/clientwin.c:1298
msgid "Saved client window does not want to be managed."
msgstr "Talletettu asiakasikkuna ei halua sitä hallittavan."
msgid "Unable to store colourmap watch info."
msgstr "Värikartan valvonnan alustaminen epäonnistui."
-#: ../ioncore/region.c:46
+#: ../ioncore/region.c:47
msgid "Creating region with negative width or height!"
msgstr "Yritys luoda korkeudeltaan tai leveydeltään negatiivinen alue."
-#: ../ioncore/region.c:94
+#: ../ioncore/region.c:95
#, c-format
msgid "Destroying object \"%s\" with client windows as children."
-msgstr "Olio \"%s\", jolla on vielä asiakasikkunoita lapsena, tuhotaan."
+msgstr "Tuhotaan kappale \"%s\", jolla on vielä asiakasikkunoita."
+
+#: ../ioncore/region.c:434
+#, c-format
+msgid "Can not destroy %s: contains client windows."
+msgstr "Kappaletta %s ei voida tuhota, sillä se sisältää asiakasikkunoita."
+
+#: ../ioncore/region.c:435
+msgid "(unknown)"
+msgstr "(tuntematon)"
#
-#: ../ioncore/region.c:395
+#: ../ioncore/region.c:498
msgid "Failed to rescue some client windows - not closing."
msgstr "Joidenkin asiakasikkunoiden pelastaminen epäonnistui - ei suljeta."
-#: ../ioncore/attach.c:71 ../ioncore/pholder.c:46
-msgid "Unable to reparent."
-msgstr "Vanhemman vaihto epäonnistui."
-
-#: ../ioncore/attach.c:157 ../ioncore/frame-pointer.c:282
+#: ../ioncore/attach.c:58 ../ioncore/frame-pointer.c:280
#, c-format
msgid "Attempt to make region %s manage its ancestor %s."
msgstr "Yritys saattaa alue %s hallitsemaan sen esivanhempaa %s."
-#: ../ioncore/manage.c:77
+#: ../ioncore/attach.c:83
+msgid "Unable to reparent."
+msgstr "Vanhemman vaihto epäonnistui."
+
+#: ../ioncore/attach.c:92
+msgid "Unexpected attach error: trying to recover by attaching to screen."
+msgstr "Tuntematon liitäntävirhe: yritetään toipua liittämällä näyttöön."
+
+#: ../ioncore/attach.c:111
+msgid "Failed recovery."
+msgstr "Toipuminen epäonnistui."
+
+#: ../ioncore/manage.c:193
msgid "Unable to find a screen for a new client window."
msgstr "Uudelle asiakasikkunalle ei löytynyt näyttöä."
-#: ../ioncore/rootwin.c:223
+#: ../ioncore/rootwin.c:218
#, c-format
msgid "Unable to redirect root window events for screen %d."
msgstr "Juuri-ikkunan %d viestien uudelleenohjaus epäonnistui."
-#: ../ioncore/rootwin.c:319 ../ioncore/rootwin.c:344
-msgid "Xinerama sanity check failed; overlapping screens detected."
-msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja."
-
-#: ../ioncore/rootwin.c:326 ../ioncore/rootwin.c:351
-msgid "Xinerama sanity check failed; zero size detected."
-msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja."
-
-#: ../ioncore/rootwin.c:379 ../ioncore/rootwin.c:397
-msgid "Don't know how to get Xinerama information for multiple X root windows."
-msgstr "Xinerama-tietoa ei osata käyttää usealle juuri-ikkunalle."
-
-#: ../ioncore/rootwin.c:393
-msgid "Error retrieving Xinerama information."
-msgstr "Xinerama-tietoja ei saatu."
-
-#: ../ioncore/rootwin.c:432 ../ioncore/rootwin.c:451
-#, c-format
-msgid "Unable to setup Xinerama screen %d."
-msgstr "Xinerama-ruudun %d hallittavaksi saattaminen epäonnistui."
-
-#: ../ioncore/rootwin.c:464
-#, c-format
-msgid "Unable to setup X screen %d."
-msgstr "X-ruudun %d hallittavaksi saattaminen epäonnistui."
-
-#: ../ioncore/names.c:90
+#: ../ioncore/names.c:91
#, c-format
msgid "Corrupt instance number %s."
msgstr "Rikkinäinen instanssinumero %s."
-#: ../ioncore/saveload.c:125
+#: ../ioncore/saveload.c:98
#, c-format
msgid "Unknown class \"%s\", cannot create region."
msgstr "Luokka \"%s\" on tuntematon. Aluetta ei voida luoda."
-#: ../ioncore/saveload.c:205
+#: ../ioncore/saveload.c:202
#, c-format
msgid ""
"There were errors loading layout. Backing up current layout savefile as\n"
"tilanteen aiheuttavat virheet (mahdollisesti puuttuva moduuli?) muissa\n"
"asetustiedostoissasi."
-#: ../ioncore/saveload.c:248
+#: ../ioncore/saveload.c:253
msgid "Unable to get file for layout backup."
msgstr "Sijoittelun varmuuskopiolle ei voitu muodostaa tiedostonimeä."
-#: ../ioncore/saveload.c:252
+#: ../ioncore/saveload.c:257
#, c-format
msgid "Backup file %s already exists."
msgstr "Varmuuskopio %s on jo olemassa."
-#: ../ioncore/saveload.c:258
+#: ../ioncore/saveload.c:263
msgid "Failed backup."
msgstr "Varmuuskopionti epäonnistui."
#
-#: ../ioncore/saveload.c:263
+#: ../ioncore/saveload.c:268
msgid "Unable to initialise layout on any screen."
msgstr "Sijoittelun alustus epäonnistui kaikilla näytöillä."
-#: ../ioncore/saveload.c:283
+#: ../ioncore/saveload.c:295
#, c-format
msgid "Unable to get configuration for screen %d."
msgstr "Ruudun %d asetukset puuttuvat."
-#: ../ioncore/saveload.c:296
+#: ../ioncore/saveload.c:308
msgid "Unable to save layout."
msgstr "Sijoittelun talletus epäonnistui."
-#: ../ioncore/conf.c:143
+#: ../ioncore/conf.c:235
msgid "User directory can not be set."
msgstr "Käyttäjän hakemistoa ei pystytä asettamaan."
-#: ../ioncore/conf.c:217
+#: ../ioncore/conf.c:309
msgid "Some bindmaps were empty, loading ioncore_efbb."
msgstr "Jotkut sidontakartat olivat tyhjiä. Ladataan ioncore_efbb."
-#: ../ioncore/fullscreen.c:98
+#: ../ioncore/fullscreen.c:49
msgid "Failed to enter full screen mode."
msgstr "Vaihto kokoruudun tilaan epäonnistui."
-#: ../ioncore/fullscreen.c:120
+#: ../ioncore/fullscreen.c:83
msgid ""
"Failed to return from full screen mode; remaining manager or parent from "
"previous location refused to manage us."
"tai vanhempi kieltäytyi hallitsemasta ikkunaa."
#
-#: ../ioncore/mplex.c:172
-msgid "Refusing to destroy - not empty."
-msgstr "Tuhoamisesta kieltäydytään - ei tyhjä."
-
-#
-#: ../ioncore/mplex.c:1678
+#: ../ioncore/mplex.c:1685
msgid "Invalid position setting."
msgstr "Virheellinen paikka-asetus."
#
-#: ../ioncore/mplex.c:1718
+#: ../ioncore/mplex.c:1725
msgid "Invalid action setting."
msgstr "Virheellinen toiminto-asetus."
-#: ../ioncore/gr.c:119
+#: ../ioncore/gr.c:120
#, c-format
msgid "Drawing engine %s is not registered!"
msgstr "Piirtomoottoria %s ei ole rekisteröity!"
-#: ../ioncore/gr.c:138
+#: ../ioncore/gr.c:139
#, c-format
msgid "Unable to find brush for style '%s'."
msgstr "Tyylille '%s' ei löytynyt pensseliä."
-#: ../ioncore/gr.c:408
+#: ../ioncore/gr.c:646
msgid "No drawing engines loaded, trying \"de\"."
msgstr "Yhtään piirtomoottoria ei ole ladattu. Yritetään oletusta \"de\"."
-#: ../ioncore/group.c:184 ../mod_tiling/tiling.c:96
+#
+#: ../ioncore/frame-draw.c:314
+msgid "<empty frame>"
+msgstr "<tyhjä kehys>"
+
+#: ../ioncore/group.c:186 ../mod_tiling/tiling.c:92
#, c-format
msgid "Error reparenting %s."
msgstr "Virhe alueen %s vanhemman vaihdossa."
-#
-#: ../ioncore/group.c:481 ../mod_tiling/tiling.c:668
-msgid "Workspace not empty - refusing to destroy."
-msgstr "Työpöytää ei voida tuhota, koska se ei ole tyhjä."
-
-#: ../ioncore/group.c:680
+#: ../ioncore/group.c:711
msgid "'bottom' already set."
msgstr "'pohja' on jo asetettu."
msgid "Invalid direction parameter."
msgstr "Virheellinen suunta."
-#: ../ioncore/group-ws.c:67
+#: ../ioncore/group-ws.c:51
#, c-format
msgid "Unknown placement method \"%s\"."
msgstr "Tuntematon sijoittelumenetelmä \"%s\"."
+#: ../ioncore/detach.c:176
+msgid "Failed to reattach."
+msgstr "Uudelleenliittäminen epäonnistui"
+
+#: ../ioncore/screen-notify.c:190
+msgid "act: "
+msgstr "act: "
+
#
#
-#: ../mod_tiling/tiling.c:77
+#: ../mod_tiling/tiling.c:73
msgid "Split not on workspace."
msgstr "Jako ei ole tällä työpöydällä."
-#: ../mod_tiling/tiling.c:373
+#: ../mod_tiling/tiling.c:348
msgid "Unable to create a node for status display."
msgstr "Solmun luonti tilanäytölle epäonnistui."
-#: ../mod_tiling/tiling.c:386
+#: ../mod_tiling/tiling.c:361
msgid "Unable to create new split for status display."
msgstr "Uuden jaon tekeminen tilanäytölle epäonnistui."
-#: ../mod_tiling/tiling.c:937
+#: ../mod_tiling/tiling.c:710
+msgid "Tiling in useless state."
+msgstr "Laatoitus kelvottomassa tilassa."
+
+#: ../mod_tiling/tiling.c:924
msgid "Invalid direction"
msgstr "Virheellinen suunta."
#
-#: ../mod_tiling/tiling.c:970 ../mod_tiling/split.c:1018
+#: ../mod_tiling/tiling.c:957 ../mod_tiling/split.c:1018
msgid "Invalid node."
msgstr "Epäkelpo solmu."
#
-#: ../mod_tiling/tiling.c:989
+#: ../mod_tiling/tiling.c:976
msgid "Unable to split."
msgstr "Halkaisu ei ole mahdollista."
-#: ../mod_tiling/tiling.c:1092
-msgid "Nil frame."
-msgstr "Kehys on asettamatta."
-
-#: ../mod_tiling/tiling.c:1097
-msgid "The frame is not managed by the workspace."
-msgstr "Kehys ei ole tämän työpöydän hallinnoima."
+#: ../mod_tiling/tiling.c:1090
+msgid ""
+"Unable to unsplit: Could not move client windows elsewhere within the tiling."
+msgstr ""
+"Ei voida poistaa halkaisua: asiakasikkunoita ei voitu siirtää muualle "
+"laatoituksessa."
-#: ../mod_tiling/tiling.c:1196
+#: ../mod_tiling/tiling.c:1207
msgid "Nil parameter."
msgstr "Parametri on asettamatta."
-#: ../mod_tiling/tiling.c:1201
+#: ../mod_tiling/tiling.c:1212
msgid "Manager doesn't match."
msgstr "Hallitsija on väärä."
-#: ../mod_tiling/tiling.c:1238
+#: ../mod_tiling/tiling.c:1249
msgid "The status display is not a valid parameter for this routine."
msgstr "Tilanäyttö ei ole kelpo parametri tälle toiminnolle."
-#: ../mod_tiling/tiling.c:1329
+#: ../mod_tiling/tiling.c:1340
msgid "Refusing to float split directly containing the status display."
msgstr "Tilanäytön suoraan sisältävää jakoa ei voida kelluttaa."
-#: ../mod_tiling/tiling.c:1392
+#: ../mod_tiling/tiling.c:1403
msgid "No suitable split here."
msgstr "Ei sopivaa jakoa tässä."
#
-#: ../mod_tiling/tiling.c:1428
+#: ../mod_tiling/tiling.c:1439
msgid "Could not get split tree."
msgstr "Halkaisupuu puuttuu."
-#: ../mod_tiling/tiling.c:1449
+#: ../mod_tiling/tiling.c:1460
msgid "Workspace already has a status display node."
msgstr "Työpöydällä on jo solmu tilanäytölle."
#
-#: ../mod_tiling/tiling.c:1487
+#: ../mod_tiling/tiling.c:1498
msgid "Missing region parameters."
msgstr "Alueen parameterit puuttuu."
-#: ../mod_tiling/tiling.c:1531 ../mod_tiling/splitfloat.c:780
+#: ../mod_tiling/tiling.c:1542 ../mod_tiling/splitfloat.c:780
msgid "Invalid direction."
msgstr "Virheellinen suunta."
#
-#: ../mod_tiling/tiling.c:1606
+#: ../mod_tiling/tiling.c:1617
msgid "No split type given."
msgstr "Halkaisun tyyppiä ei ole asetettu."
-#: ../mod_tiling/tiling.c:1619
+#: ../mod_tiling/tiling.c:1630
msgid "Unknown split type."
msgstr "Tuntematon halkaisutyyppi."
#
#
-#: ../mod_tiling/tiling.c:1659
+#: ../mod_tiling/tiling.c:1670
msgid "The workspace is empty."
msgstr "Työpöytä on tyhjä."
-#: ../mod_tiling/placement.c:106
+#: ../mod_tiling/placement.c:104
#, c-format
msgid ""
"Ooops... could not find a region to attach client window to on workspace %s."
msgstr "REGION_RQGEOM_TRYONLY:ä ei tueta tilanäytölle."
#
-#: ../mod_tiling/split.c:1082
+#: ../mod_tiling/split.c:1083
msgid "Splitting the status display is not allowed."
msgstr "Tilanäytön halkaisu ei ole sallittu."
-#: ../mod_tiling/split.c:1113 ../mod_tiling/splitfloat.c:903
+#: ../mod_tiling/split.c:1114 ../mod_tiling/splitfloat.c:903
msgid "Unable to split: not enough free space."
msgstr "Ei voida halkaista: liian vähän tilaa."
-#: ../mod_tiling/split.c:1864
+#: ../mod_tiling/split.c:1865
#, c-format
msgid "Unable to get configuration for %s."
msgstr "Alueelle \"%s\" ei saatu asetuksia."
msgid "Status display badly located in split tree."
msgstr "Tilanäyttö on huonosti sijoittuneena halkaisupuuhun."
-#: ../mod_tiling/ops.c:28
-msgid "Already detached"
-msgstr "Irroitettu jo"
-
-#: ../mod_tiling/ops.c:142
+#: ../mod_tiling/ops.c:72 ../mod_tiling/ops.c:120
msgid "Not member of a group"
msgstr "Ei jäsenenä missään ryhmässä"
-#: ../mod_tiling/ops.c:147
+#: ../mod_tiling/ops.c:77
msgid "Manager group already has bottom"
msgstr "Managerilla on jo 'pohja'"
-#: ../mod_query/wedln.c:777
+#: ../mod_tiling/ops.c:154
+msgid "Unable to move a region from tiling to group."
+msgstr "Ei voitu siirtää kappaletta laatoituksesta ryhmään."
+
+#: ../mod_query/wedln.c:813
msgid "history"
msgstr "hist.täyd."
-#: ../mod_query/fwarn.c:34
+#: ../mod_query/fwarn.c:35
msgid "Error:\n"
msgstr "Virhe:\n"
#
-#: ../mod_menu/menu.c:537
+#: ../mod_menu/menu.c:601
msgid "Empty menu."
msgstr "Tyhjä valikko."
#
-#: ../mod_sm/sm.c:110
+#: ../mod_sm/sm.c:111
msgid "Failed to set session directory."
msgstr "Istuntohakemiston asetus epäonnistui."
msgid "Unable to connect to the session manager."
msgstr "Yhteydenotto istunnonhallintaohjelmaan epäonnistui."
-#: ../mod_sp/main.c:85
+#: ../mod_sp/main.c:126
msgid "Unable to create scratchpad."
msgstr "Suttausalueen luonti epäonnistui."
msgid "reading a pipe"
msgstr "putken luku"
-#: ../mod_statusbar/statusbar.c:1046
+#: ../mod_statusbar/main.c:159
+msgid "ion-statusd timed out."
+msgstr "ion-statusd:n käynnistyksen aikaraja umpeutui."
+
+#: ../mod_statusbar/statusbar.c:1081
#, c-format
msgid "[ %date || load: %load ] %filler%systray"
msgstr ""
-#: ../de/init.c:42
+#: ../de/init.c:68
#, c-format
msgid "Border attribute %s sanity check failed."
msgstr "Reunan arvon '%s' järkevyystarkistus epäonnistui."
-#: ../de/init.c:65
+#: ../de/init.c:91
#, c-format
msgid "Unknown border style \"%s\"."
msgstr "Reunan tyyli \"%s\" on tuntematon."
-#: ../de/init.c:97
+#: ../de/init.c:111
+#, c-format
+msgid "Unknown border side configuration \"%s\"."
+msgstr "Reunan sivuasetus \"%s\" on tuntematon."
+
+#: ../de/init.c:144
#, c-format
msgid "Unable to allocate colour \"%s\"."
msgstr "Värin \"%s\" varaaminen epäonnistui."
-#: ../de/init.c:160
+#: ../de/init.c:210
#, c-format
msgid "Corrupt substyle table %d."
msgstr "Alityylin %d taulu on rikki."
-#: ../de/init.c:193
+#: ../de/init.c:243
#, c-format
msgid "Unknown text alignment \"%s\"."
msgstr "Tuntematon tekstin tasaus \"%s\"."
-#: ../de/init.c:263
+#: ../de/init.c:319
#, c-format
msgid "'based_on' for %s points back to the style itself."
msgstr "Tyylin %s 'based_on' -asetus osoittaa itseensä."
-#: ../de/init.c:266
+#: ../de/init.c:322
#, c-format
-msgid "Unknown base style \"%s\"."
+msgid "Unknown base style. \"%s\""
msgstr "Tuntematon pohjatyyli \"%s\"."
#: ../de/font.c:47
msgstr "Hätävarakirjaisimen lataus epäonnistui."
#: ../de/style.c:315
-#, c-format
-msgid "Style %s still in use [%d] but the module is being unloaded!"
+msgid "Style is still in use [%d] but the module is being unloaded!"
msgstr "Tyyli %s on vielä käytössä [%d], mutta moduulia poistetaan!"
#: ../ion/ion.c:42 ../pwm/pwm.c:42
msgstr "Lisää hakemisto hakupolulle"
#: ../ion/ion.c:51 ../pwm/pwm.c:51
-msgid "Manage default root window/non-Xinerama screen only"
-msgstr ""
-"Hallitse vain oletusarvoista juuri-ikkunaa. (Vastaa ensisijaista näyttöä jos "
-"Xinerama ei ole käytössä.)"
-
-#: ../ion/ion.c:55
-msgid "Use Xinerama screen information (default: 1/yes)"
-msgstr "Hyödynnä Xineramaa (oletus: 1/kyllä)"
+msgid "Manage default screen only"
+msgstr "Hallitse vain oletusarvoista juuri-ikkunaa."
-#: ../ion/ion.c:58 ../pwm/pwm.c:58
-msgid "Ignored: not compiled with Xinerama support"
-msgstr "Jätetään huomiotta: ohjelmaa ei ole käännetty Xinerama-tuella"
-
-#: ../ion/ion.c:62 ../pwm/pwm.c:62
+#: ../ion/ion.c:54 ../pwm/pwm.c:54
msgid "Name of session (affects savefiles)"
msgstr "Istunnon nimi (vaikuttaa talletustiedostoihin)"
-#: ../ion/ion.c:65 ../pwm/pwm.c:65
+#: ../ion/ion.c:57 ../pwm/pwm.c:57
msgid "Session manager client ID"
msgstr "Istunnonhallinnan asiakastunniste"
-#: ../ion/ion.c:68 ../pwm/pwm.c:68
+#: ../ion/ion.c:60 ../pwm/pwm.c:60
msgid "Do not create startup error log and display it with xmessage."
msgstr "Älä luo käynnistysvirhelokia ja näytä sitä xmessage:lla."
-#: ../ion/ion.c:72 ../pwm/pwm.c:72
+#: ../ion/ion.c:64 ../pwm/pwm.c:64
msgid "Show this help"
msgstr "Näytä tämä aputeksti"
-#: ../ion/ion.c:75 ../pwm/pwm.c:75
+#: ../ion/ion.c:67 ../pwm/pwm.c:67
msgid "Show program version"
msgstr "Näytä ohjelman versio"
-#: ../ion/ion.c:78 ../pwm/pwm.c:78
+#: ../ion/ion.c:70 ../pwm/pwm.c:70
msgid "Show about text"
msgstr "Näytä tietoja ohjelmasta"
-#: ../ion/ion.c:93
+#: ../ion/ion.c:85
msgid "Could not get user configuration file directory."
msgstr "Käyttäjän asetustiedostohakemisto puuttuu, eikä sitä voitu luoda."
-#: ../ion/ion.c:107
+#: ../ion/ion.c:99
#, c-format
msgid "%s/welcome.txt"
msgstr "%s/welcome.fi.txt"
-#: ../ion/ion.c:140 ../pwm/pwm.c:87
+#: ../ion/ion.c:132 ../pwm/pwm.c:79
#, c-format
msgid ""
"Usage: %s [options]\n"
"Käyttö: %s [valintoja]\n"
"\n"
-#: ../ion/ion.c:200 ../pwm/pwm.c:150
-msgid "Invalid parameter to -xinerama."
-msgstr "Virheellinen parametri -xinerama:lle"
-
#
-#: ../ion/ion.c:219 ../pwm/pwm.c:169
+#: ../ion/ion.c:200 ../pwm/pwm.c:150
msgid "Invalid command line."
msgstr "Virheellinen komentorivi."
-#: ../ion/ion.c:241
+#: ../ion/ion.c:222
msgid "Ion startup error log:\n"
msgstr "Ionin käynnistysvirheloki:\n"
-#: ../ion/ion.c:252 ../pwm/pwm.c:202
+#: ../ion/ion.c:233 ../pwm/pwm.c:183
msgid "Refusing to start due to encountered errors."
msgstr "Ohjelma kieltäytyy käynnistymästä tavattujen virheiden johdosta."
-#: ../pwm/pwm.c:55
-msgid "Use Xinerama screen information (default: 0/no)"
-msgstr "Hyödynnä Xineramaa (oletus: 0/ei)"
-
-#: ../pwm/pwm.c:191
+#: ../pwm/pwm.c:172
msgid "PWM startup error log:\n"
msgstr "PWM:n käynnistysvirheloki:\n"
#: ../../libextl-3/luaextl.c:1356
msgid "Returned dead object."
-msgstr "Kuollut olio palautettu."
+msgstr "Kuollut kappale palautettu."
#: ../../libextl-3/luaextl.c:1359
#, c-format
"kykenee."
#
-#: ../../libextl-3/luaextl.c:2373
+#: ../../libextl-3/luaextl.c:2347
msgid "Maximal serialisation depth reached."
msgstr "Suurin mahdollinen talletuksen rekursiosyvyys saavutettu."
-#: ../../libextl-3/luaextl.c:2394
+#: ../../libextl-3/luaextl.c:2368
#, c-format
msgid "Unable to serialise type %s."
msgstr "Tyyppiä %s ei voida tallettaa."
-#: ../../libextl-3/luaextl.c:2425
+#: ../../libextl-3/luaextl.c:2399
msgid "-- This file has been generated by Ion. Do not edit.\n"
msgstr "-- Tämä tiedosto on Ionin luoma. Älä editoi sitä.\n"
"Tyyppitarkistus epäonnistui tason 2 kutsunkäsittelijässä parametrille #%d "
"(oli %s, odotettiin %s)."
-msgid "Grow-D"
-msgstr "Kasvu: alas"
-
-msgid "Grow-U"
-msgstr "Kasvu: ylös"
-
-msgid "Grow-R"
-msgstr "Kasvu: oikealle"
-
-msgid "Grow-L"
-msgstr "Kasvu: vasemmalle"
-
-msgid "Pos-BR"
-msgstr "Paikka: alaoikea"
-
-msgid "Pos-BL"
-msgstr "Paikka: alavasen"
-
-msgid "Pos-TR"
-msgstr "Paikka: yläoikea"
+msgid "Scroll the message or completions up/down."
+msgstr "Vieritä viestiä tai täydennyksiä ylös/alas."
-msgid "Pos-TL"
-msgstr "Paikka: ylävasen"
+msgid "Close the query/message box, not executing bound actions."
+msgstr "Sulje kysely/viesti suorittamatta sidottuja toimintoja."
-msgid "Toggle floating dock."
-msgstr "Näytä/piiloita kelluva laituri (dock)."
+msgid "Close the query and execute bound action."
+msgstr "Sulje kysely ja suorita sidottu toiminta."
-msgid "Clear the menu's typeahead find buffer."
-msgstr "Tyhjää valikon hakupuskuri."
+msgid "Complete from history"
+msgstr "Täydennä historiasta"
-msgid "Select next/previous menu entry."
-msgstr "Siirry seuraavaan/edelliseen valintaan."
+msgid "Try to complete the entered text or cycle through completions."
+msgstr "Yritä täydentää syötetty teksti tai selaa täydennyksiä."
#
-#
-msgid "Activate current menu entry."
-msgstr "Suorita valinta."
-
-msgid "Close the menu."
-msgstr "Sulje valikko."
-
-msgid "New tiling"
-msgstr "Uusi laatoitus"
-
-msgid "Detach"
-msgstr "Irroita"
+msgid "Clear mark/cancel selection."
+msgstr "Lopeta tekstin valinta."
#
-msgid "Transpose"
-msgstr "Käännä"
+msgid "Copy selection."
+msgstr "Kopioi valittu teksti."
#
-msgid "Flip"
-msgstr "Peilaa"
+msgid "Cut selection."
+msgstr "Leikkaa valittu teksti."
#
-#
-msgid "Split horizontally"
-msgstr "Jaa vaakasuunnassa"
+msgid "Set mark/begin selection."
+msgstr "Aloita tekstin valinta."
-#
-#
-msgid "Split vertically"
-msgstr "Jaa pystysuunnassa"
+msgid "Paste from the clipboard."
+msgstr "Liimaa teksti leikelaudalta."
#
-msgid "At root"
-msgstr "Juuressa"
+msgid "Select next/previous (matching) history entry."
+msgstr "Näytä seuraava/edellinen vastaus muistista."
-msgid "Below"
-msgstr "Alapuolella"
+msgid "Transpose characters."
+msgstr "Transponoi merkit."
-msgid "Above"
-msgstr "Yläpuolella"
+msgid "Delete the whole line."
+msgstr "Tuhoa koko rivi."
-msgid "At right"
-msgstr "Oikealla"
+msgid "Delete to end of line."
+msgstr "Tuhoa merkit rivin loppuun saakka."
-msgid "At left"
-msgstr "Vasemmalla"
+msgid "Delete one word forward/backward."
+msgstr "Tuhoa yksi sana eteen/taakse."
-msgid "Float split"
-msgstr "Kelluta"
+msgid "Delete previous character."
+msgstr "Tuhoa edellinen merkki."
-#
-msgid "Destroy frame"
-msgstr "Tuhoa kehys"
+msgid "Delete next character."
+msgstr "Poista seuraava merkki."
-msgid "Tile frame, if no tiling exists on the workspace"
-msgstr "Laatoita kehys, jos työpöydällä ei ole kehystä"
+msgid "Skip one word forward/backward."
+msgstr "Ohita yksi sana eteen/taaksepäin"
-msgid "Detach window from tiled frame"
-msgstr "Irroita ikkuna laatoitetusta kehyksestä"
+msgid "Go to end/beginning."
+msgstr "Mene rivin alkuun/loppuun."
-msgid "Destroy current frame."
-msgstr "Tuhoa tämänhetkinen kehys."
+msgid "Move one character forward/backward."
+msgstr "Siirry yksi merkki eteen/taakse."
-msgid "Split current frame horizontally."
-msgstr "Halkaise tämänhetkinen kehys vaakasuunnassa."
+msgid "Kill"
+msgstr "Tapa"
-msgid "Go to frame above/below/right/left of current frame."
-msgstr ""
-"Siirry tämänhetkisen kehyksen yllä/alla/vasemmalle/oikealla olevaan "
-"kehykseen."
+msgid "Attach tagged"
+msgstr "Liitä merkityt"
-msgid "Split current frame vertically."
-msgstr "Halkaise tämänhetkinen kehys pystysuunnassa."
+msgid "Rename"
+msgstr "Uudelleennimeä"
-msgid "Failed to create statusbar."
-msgstr "Epäonnistuttiin tilarivin luonnissa"
+msgid "Close"
+msgstr "Sulje"
-msgid "Screen already has an stdisp. Refusing to create a statusbar."
-msgstr "Ruudulla on jo tilanäyttö. Kieltäydytään luomasta tilariviä."
+msgid "De/reattach"
+msgstr "Irroita/liitä"
-msgid "Screen not found."
-msgstr "Ruutua ei löytynyt."
+msgid "Toggle tag"
+msgstr "Muuta merkintää"
-msgid "Failed to start ion-statusd."
-msgstr "Ion-statusd:n käynnistys eopäonnistui."
+msgid "Window info"
+msgstr "Ikkunan tiedot"
-msgid "Errors starting ion-statusd:\n"
-msgstr "Ion-statusd:n käynnistysvirheet:\n"
+msgid "Clear tags"
+msgstr "Poista merkinnät"
-msgid "Could not find %s"
-msgstr "Ei löydettyä %s:ää."
+msgid "Exit"
+msgstr "Poistu"
-msgid "ion-statusd quit."
-msgstr "ion-statusd päätti suorituksen."
+msgid "Restart TWM"
+msgstr "Käynnistä TWM"
-msgid "Not a directory."
-msgstr "Ei hakemisto."
+msgid "Restart"
+msgstr "Uudelleenkäynnistä"
-msgid "Invalid command"
-msgstr "Virheellinen komento"
+msgid "Save"
+msgstr "Talleta"
-msgid "Error in command string: "
-msgstr "Virhe komentojonossa:"
+msgid "Session"
+msgstr "Istunto"
-msgid "Error compiling guard: %s"
-msgstr "Virhe vahdin käännössä. %s"
+msgid "Styles"
+msgstr "Tyylit"
-msgid "Invalid guard %s."
-msgstr "Virheellinen vahti %s."
+msgid "About Ion"
+msgstr "Tietoja Ionista"
-msgid "Main menu:"
-msgstr "Päävalikko:"
+msgid "Help"
+msgstr "Ohjeet"
-msgid "Context menu:"
-msgstr "Kontekstivalikko:"
+msgid "Lock screen"
+msgstr "Lukitse näyttö"
-msgid "Floating frame"
-msgstr "Kelluva kehys"
+msgid "Terminal"
+msgstr "Pääteohjelma"
-msgid "Tiled frame"
-msgstr "Laatoitettu kehys"
+#
+msgid "Run..."
+msgstr "Suorita..."
-msgid "Tiling"
-msgstr "Laatoitus"
+#
+msgid "Move in specified direction."
+msgstr "Liiku vastaavaan suuntaan."
+
+msgid "Shrink in specified direction."
+msgstr "Kutista vastaavaan suuntaan."
#
-msgid "Workspace"
-msgstr "Työpöytä"
+msgid "Grow in specified direction."
+msgstr "Kasvata vastaavaan suuntaan."
-msgid "Screen"
-msgstr "Näyttö"
+msgid "End the resize mode."
+msgstr "Siirry tilasta pois."
-msgid "Frame"
-msgstr "Kehys"
+msgid "Cancel the resize mode."
+msgstr "Peruuta tilasta."
-msgid "Recursive table - unable to deepcopy"
-msgstr "Rekursiivinen taulu - ei voida syväkopioida."
+msgid "Move the frame."
+msgstr "Siirrä kehystä."
-msgid ""
-"Making the following minimal emergency mappings:\n"
-" F2 -> xterm\n"
-" F11 -> restart\n"
-" F12 -> exit\n"
-" Mod1+C -> close\n"
-" Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-msgstr ""
-"Tehdään seuraavat vähimmäiset hätäsidonnat:\n"
-" F2 -> xterm\n"
-" F11 -> uudelleenkäynnistys\n"
-" F12 -> lopetus\n"
-" Mod1+C -> sulkeminen\n"
-" Mod1+K P/N -> vaihto kehyksen sisällä\n"
+msgid "Lower the frame."
+msgstr "Alenna kehystä."
-msgid "Unable to append to non-table menu"
-msgstr "Ei voida lisätä valikkoon, koska sitä ei ole määritelty tauluna "
+#
+msgid "Raise the frame."
+msgstr "Nosta kehys."
-msgid "Cannot save selection."
-msgstr "Ei voida tallettaa valintaa."
+msgid "Toggle shade mode"
+msgstr "Kytke litistys päälle/pois."
-msgid "Save look selection in %s?"
-msgstr "Talletaanko ulkonäköasetus tiedostoon %s?"
+msgid "Attach tagged objects to this frame."
+msgstr "Liitä merkityt kappaleet tähän kehykseen."
-msgid "Too much result data"
-msgstr "Liian suuri vastaus"
+msgid "Maximize the frame horizontally/vertically."
+msgstr "Maksimoi kehys vaaka/pystysuunnassa."
-msgid "Could not find client window %s."
-msgstr "Asiakasikkunaa %s ei löytynyt."
+msgid "Move current object within the frame left/right."
+msgstr ""
+"Siirrä kehyksessä tällä hetkellä näytettävää kappaletta vasemmalle/oikealle."
-msgid "Cannot attach: different root windows."
-msgstr "Ei voida liittää: eri juuri-ikkunat."
+msgid "Switch to next/previous object within the frame."
+msgstr "Siirry seuraavaan/edelliseen kehyksen jakavaan kappaleeseen."
-msgid "Unknown error"
-msgstr "Tuntematon virhe"
+msgid "Switch to n:th object within the frame."
+msgstr "Siirry n:teen kehyksen jakavaan kappaleeseen."
-msgid "Go to window:"
-msgstr "Mene ikkunaan:"
+#
+msgid "Query for a client window to attach."
+msgstr "Kysy liitettävää asiakasikkunaa."
-msgid "Attach window:"
-msgstr "Liitä ikkuna:"
+msgid "Move objects between frames by dragging and dropping the tab."
+msgstr ""
+"Siirrä kappaletta kehysten välillä raahaamalla ja pudottamalla välilehti."
-msgid "Go to or create workspace:"
-msgstr "Mene tai luo työpöytä:"
+msgid "Resize the frame."
+msgstr "Muuta kehyksen kokoa."
-msgid "Exit Ion/Shutdown session (y/n)?"
-msgstr "Poistu Ionista/Lopeta istunto (kyllä: y, ei: n)?"
+msgid "Switch the frame to display the object indicated by the tab."
+msgstr "Vaihda kehys näyttämään välilehden ilmoittama kappale."
-msgid "Restart Ion (y/n)?"
-msgstr "Uudelleenkäynnistä Ion (kyllä: y, ei: n)?"
+msgid "Begin move/resize mode."
+msgstr "Aloita siirto ja koonmuutostila."
-msgid "Frame name:"
-msgstr "Kehyksen nimi:"
+msgid "Display context menu."
+msgstr "Näytä kontekstivalikko."
-msgid "Workspace name:"
-msgstr "Työpöydän nimi:"
+#
+msgid "Query for a client window to go to."
+msgstr "Kysy asiakasikkunaa, johon siirtyä."
-msgid "Edit file:"
-msgstr "Muokkaa tiedostoa:"
+msgid "Query for workspace to go to or create a new one."
+msgstr "Kysy työpöytää jolle siirtyä, tai luo uusi."
-msgid "View file:"
-msgstr "Näytä tiedosto:"
+msgid "Query for file to view."
+msgstr "Kysy tiedostoa näytettäväksi."
-msgid "Run:"
-msgstr "Suorita:"
+msgid "Query for file to edit."
+msgstr "Kysy tiedostoa muokattavaksi."
-msgid "Failed to open ~/.ssh/known_hosts"
-msgstr "Tiedostoa ~/.ssh/known_hosts avaaminen epäonnistui."
+msgid "Query for host to connect to with SSH."
+msgstr "Ota SSH-yhteys kyseltävään koneeseen."
-msgid "Failed to open ~/.ssh/config"
-msgstr "Tiedoston ~/.ssh/config avaaminen epäonnistui."
+msgid "Query for Lua code to execute."
+msgstr "Kysy Lua-koodia ajettavaksi."
-msgid "SSH to:"
-msgstr "Avaa SSH-yhteys:"
+msgid "Query for command line to execute."
+msgstr "Kysy komentoriviä suoritettavaksi."
-msgid "Manual page (%s):"
-msgstr "Ohjesivu (%s):"
+#
+msgid "Run a terminal emulator."
+msgstr "Käynnistä pääte-emulaattori."
-msgid "Lua code:"
-msgstr "Lua-koodia:"
+msgid "Show the Ion manual page."
+msgstr "Näytä Ionin ohjesivu."
-msgid "Unknown menu %s."
-msgstr "Tuntematon valikko %s."
+msgid "Query for manual page to be displayed."
+msgstr "Kysy ohjesivua näytettäväksi."
-msgid "Missing submenu "
-msgstr "Puuttuva alivalikko "
+msgid "Toggle tag of current object."
+msgstr "Merkitse aktiivinen kappale."
-msgid "%s:"
+msgid "Detach (float) or reattach an object to its previous location."
msgstr ""
+"Irroita (kelluta) tai uudelleenliitä kappale sen edelliseen sijaintiin."
-msgid "No entry '%s'"
-msgstr "Tuntematon valinta '%s'."
+msgid "Close current object."
+msgstr "Sulje aktiivinen kappale."
+msgid "Toggle client window group full-screen mode"
+msgstr "Muuta asiakasikkunaryhmän kokoruudun tilaa"
+
+#
msgid ""
-"\n"
-"%sClass: %s\n"
-"%sRole: %s\n"
-"%sInstance: %s\n"
-"%sXID: 0x%x"
+"Send next key press to the client window. Some programs may not allow this "
+"by default."
msgstr ""
-"\n"
-"Luokka(class): %s\n"
-"Rooli(role): %s\n"
-"Instanssi(instance): %s\n"
-"XID: 0x%x"
-
-msgid "Toggle scratchpad."
-msgstr "Kytke suttausalue päälle/pois"
+"Lähetä seuraava näppäinpainallus aktiiviselle asiakasikkunalle. Kaikki "
+"ohjelmat eivät välttämättä salli tätä oletuksena."
-msgid "Programs"
-msgstr "Ohjelmat"
+#
+msgid "Kill client owning the client window."
+msgstr "Tapa aktiivisen asiakasikkunan omistava ohjelma."
-msgid "Lock screen"
-msgstr "Lukitse näyttö"
+#
+msgid ""
+"Nudge the client window. This might help with some programs' resizing "
+"problems."
+msgstr ""
+"Tönäise aktiivista asiakasikkunaa. Tämä saattaa auttaa joidenkin ohjelmien "
+"koko-ongelmien kanssa."
-msgid "Help"
-msgstr "Ohjeet"
+msgid "Raise focused object, if possible."
+msgstr "Nosta aktiivista kappaletta, jos mahdollista."
-#
-msgid "Workspaces"
-msgstr "Työpöydät"
+msgid "Backward-circulate focus."
+msgstr "Kierrätä fokusta taaksepäin"
-msgid "New"
-msgstr "Uusi"
+msgid "Forward-circulate focus."
+msgstr "Kierrätä fokusta eteenpäin."
-msgid "Styles"
-msgstr "Tyylit"
+msgid "Display the window list menu."
+msgstr "Näytä ikkunavalikko."
-msgid "Session"
-msgstr "Istunto"
+msgid "Display the main menu."
+msgstr "Näytä päävalikko."
-msgid "Close"
-msgstr "Sulje"
+#
+#
+msgid "Create a new workspace of chosen default type."
+msgstr "Luo uusi työpöytä ennalta asetettua tyyppiä."
-msgid "List"
-msgstr "Lista"
+#
+msgid "Go to next/previous screen on multihead setup."
+msgstr "Mene seuraavalle/edelliselle näytölle usean näytön järjestelmässä."
#
-msgid ""
-"Switch to n:th object (workspace, full screen client window) within current "
-"screen."
-msgstr ""
-"Siirry n:teen tämänhetkisen näytön lomittamaan olioon (työpöytä, kokoruudun "
-"asiakasikkuna)."
+msgid "Go to n:th screen on multihead setup."
+msgstr "Siirry näytölle n usean näytön järjestelmässä."
#
-msgid "Switch to next/previous object within current screen."
-msgstr "Siirry seuraavaan/edelliseen tämänhetkisen näytön lomittamaan olioon."
+msgid "Clear all tags."
+msgstr "Poista kaikki merkinnät."
msgid "Go to first region demanding attention or previously active one."
msgstr ""
"Mene ensimmäiseen huomiota vaativaan alueeseen, tai edelliseen aktiiviseen."
#
-msgid "Clear all tags."
-msgstr "Poista kaikki merkinnät."
+msgid "Switch to next/previous object within current screen."
+msgstr ""
+"Siirry seuraavaan/edelliseen tämänhetkisen näytön lomittamaan kappaleeseen."
#
-msgid "Go to n:th screen on multihead setup."
-msgstr "Siirry näytölle n usean näytön järjestelmässä."
+msgid ""
+"Switch to n:th object (workspace, full screen client window) within current "
+"screen."
+msgstr ""
+"Siirry n:teen tämänhetkisen näytön lomittamaan kappaleeseen (työpöytä, "
+"kokoruudun asiakasikkuna)."
-#
-msgid "Go to next/previous screen on multihead setup."
-msgstr "Mene seuraavalle/edelliselle näytölle usean näytön järjestelmässä."
+msgid "List"
+msgstr "Lista"
-#
-#
-msgid "Create a new workspace of chosen default type."
-msgstr "Luo uusi työpöytä ennalta asetettua tyyppiä."
+msgid "New"
+msgstr "Uusi"
-msgid "Display the main menu."
-msgstr "Näytä päävalikko."
+msgid "Dillo"
+msgstr ""
-msgid "Display the window list menu."
-msgstr "Näytä ikkunavalikko."
+msgid "Konqueror"
+msgstr ""
-msgid "Forward-circulate focus."
-msgstr "Kierrätä fokusta eteenpäin."
+msgid "Links"
+msgstr ""
-msgid "Backward-circulate focus."
-msgstr "Kierrätä fokusta taaksepäin"
+msgid "Opera"
+msgstr ""
-msgid "Raise focused object, if possible."
-msgstr "Nosta fokusoitu olio, jos mahdollista."
+msgid "Rxvt"
+msgstr ""
-#
-msgid ""
-"Nudge the client window. This might help with some programs' resizing "
-"problems."
+msgid "W3M"
msgstr ""
-"Tönäise aktiivista asiakasikkunaa. Tämä saattaa auttaa joidenkin ohjelmien "
-"koko-ongelmien kanssa."
-#
-msgid "Kill client owning the client window."
-msgstr "Tapa aktiivisen asiakasikkunan omistava ohjelma."
+msgid "XTerm"
+msgstr ""
#
+msgid "Workspaces"
+msgstr "Työpöydät"
+
+msgid "Programs"
+msgstr "Ohjelmat"
+
+msgid "Show the PWM manual page."
+msgstr "Näytä PWM:n ohjesivu."
+
+msgid "Toggle scratchpad."
+msgstr "Kytke suttausalue päälle/pois"
+
msgid ""
-"Send next key press to the client window. Some programs may not allow this "
-"by default."
+"\n"
+"%sClass: %s\n"
+"%sRole: %s\n"
+"%sInstance: %s\n"
+"%sXID: 0x%x"
msgstr ""
-"Lähetä seuraava näppäinpainallus aktiiviselle asiakasikkunalle. Kaikki "
-"ohjelmat eivät välttämättä salli tätä oletuksena."
+"\n"
+"Luokka(class): %s\n"
+"Rooli(role): %s\n"
+"Instanssi(instance): %s\n"
+"XID: 0x%x"
-msgid "Toggle client window group full-screen mode"
-msgstr "Muuta asiakasikkunaryhmän kokoruudun tilaa"
+msgid "No entry '%s'"
+msgstr "Tuntematon valinta '%s'."
-msgid "Close current object."
-msgstr "Sulje aktiivinen olio."
+msgid "%s:"
+msgstr ""
-msgid "Query for manual page to be displayed."
-msgstr "Kysy ohjesivua näytettäväksi."
+msgid "Missing submenu "
+msgstr "Puuttuva alivalikko "
-msgid "Show the Ion manual page."
-msgstr "Näytä Ionin ohjesivu."
+msgid "Unknown menu %s."
+msgstr "Tuntematon valikko %s."
-#
-msgid "Run a terminal emulator."
-msgstr "Käynnistä pääte-emulaattori."
+msgid "Lua code:"
+msgstr "Lua-koodia:"
-msgid "Query for command line to execute."
-msgstr "Kysy komentoriviä suoritettavaksi."
+msgid "Manual page (%s):"
+msgstr "Ohjesivu (%s):"
-msgid "Query for Lua code to execute."
-msgstr "Kysy Lua-koodia ajettavaksi."
+msgid "SSH to:"
+msgstr "Avaa SSH-yhteys:"
-msgid "Query for host to connect to with SSH."
-msgstr "Ota SSH-yhteys kyseltävään koneeseen."
+msgid "Failed to open ~/.ssh/config"
+msgstr "Tiedoston ~/.ssh/config avaaminen epäonnistui."
-msgid "Query for file to edit."
-msgstr "Kysy tiedostoa muokattavaksi."
+msgid "Failed to open ~/.ssh/known_hosts"
+msgstr "Tiedostoa ~/.ssh/known_hosts avaaminen epäonnistui."
-msgid "Query for file to view."
-msgstr "Kysy tiedostoa näytettäväksi."
+msgid "Run:"
+msgstr "Suorita:"
-msgid "Query for workspace to go to or create a new one."
-msgstr "Kysy työpöytää jolle siirtyä, tai luo uusi."
+msgid "View file:"
+msgstr "Näytä tiedosto:"
-#
-msgid "Query for a client window to go to."
-msgstr "Kysy asiakasikkunaa, johon siirtyä."
+msgid "Edit file:"
+msgstr "Muokkaa tiedostoa:"
-#
-msgid "Query for a client window to attach."
-msgstr "Kysy liitettävää asiakasikkunaa."
+msgid "Workspace name:"
+msgstr "Työpöydän nimi:"
-msgid "Display context menu."
-msgstr "Näytä kontekstivalikko."
+msgid "Frame name:"
+msgstr "Kehyksen nimi:"
-msgid "Maximize the frame horizontally/vertically."
-msgstr "Maksimoi kehys vaaka/pystysuunnassa."
+msgid "Restart Ion (y/n)?"
+msgstr "Uudelleenkäynnistä Ion (kyllä: y, ei: n)?"
-msgid "Begin move/resize mode."
-msgstr "Aloita siirto ja koonmuutostila."
+msgid "Exit Ion/Shutdown session (y/n)?"
+msgstr "Poistu Ionista/Lopeta istunto (kyllä: y, ei: n)?"
-msgid "Switch the frame to display the object indicated by the tab."
-msgstr "Vaihda kehys näyttämään välilehden ilmoittama olio."
+msgid "Go to or create workspace:"
+msgstr "Mene tai luo työpöytä:"
-msgid "Resize the frame."
-msgstr "Muuta kehyksen kokoa."
+msgid "Attach window:"
+msgstr "Liitä ikkuna:"
-msgid "Move the frame."
-msgstr "Siirrä kehystä."
+msgid "Go to window:"
+msgstr "Mene ikkunaan:"
-msgid "Move objects between frames by dragging and dropping the tab."
-msgstr "Siirrä olioita kehysten välillä raahaamalla ja pudottamalla välilehti."
+msgid "New workspace layout (default):"
+msgstr "Uuden työpöydän sijoitelma (default):"
+
+msgid "Unknown error"
+msgstr "Tuntematon virhe"
+
+msgid "Unknown layout"
+msgstr "Tuntematon sijoittelu."
+
+msgid "Cannot attach: different root windows."
+msgstr "Ei voida liittää: eri juuri-ikkunat."
+
+msgid "Could not find client window %s."
+msgstr "Asiakasikkunaa %s ei löytynyt."
+
+msgid "Too much result data"
+msgstr "Liian suuri vastaus"
+
+msgid "Could not find %s"
+msgstr "Ei löydettyä %s:ää."
-msgid "Tag current object within the frame."
-msgstr "Merkitse kehyksen tällä hetkellä näyttämä olio."
+msgid "Not a directory."
+msgstr "Ei hakemisto."
-msgid "Switch to n:th object within the frame."
-msgstr "Siirry n:teen kehyksen jakavaan olioon."
+msgid "Invalid command"
+msgstr "Virheellinen komento"
-msgid "Switch to next/previous object within the frame."
-msgstr "Siirry seuraavaan/edelliseen kehyksen jakavaan olioon."
+msgid "Error in command string: "
+msgstr "Virhe komentojonossa:"
-msgid "Move current object within the frame left/right."
-msgstr ""
-"Siirrä kehyksessä tällä hetkellä näytettävää oliota vasemmalle/oikealle."
+msgid "Error compiling guard: %s"
+msgstr "Virhe vahdin käännössä. %s"
-msgid "Attach tagged objects to this frame."
-msgstr "Liitä merkityt oliot tähän kehykseen."
+msgid "Invalid guard %s."
+msgstr "Virheellinen vahti %s."
-msgid "Toggle shade mode"
-msgstr "Kytke litistys päälle/pois."
+msgid "Main menu:"
+msgstr "Päävalikko:"
-#
-msgid "Raise the frame."
-msgstr "Nosta kehys."
+msgid "Context menu:"
+msgstr "Kontekstivalikko:"
-msgid "Lower the frame."
-msgstr "Alenna kehystä."
+msgid "Floating frame"
+msgstr "Kelluva kehys"
-msgid "Cancel the resize mode."
-msgstr "Peruuta tilasta."
+msgid "Tiled frame"
+msgstr "Laatoitettu kehys"
-msgid "End the resize mode."
-msgstr "Siirry tilasta pois."
+msgid "Tiling"
+msgstr "Laatoitus"
#
-msgid "Grow in specified direction."
-msgstr "Kasvata vastaavaan suuntaan."
+msgid "Workspace"
+msgstr "Työpöytä"
-msgid "Shrink in specified direction."
-msgstr "Kutista vastaavaan suuntaan."
+msgid "Screen"
+msgstr "Näyttö"
-#
-msgid "Move in specified direction."
-msgstr "Liiku vastaavaan suuntaan."
+msgid "Frame"
+msgstr "Kehys"
-msgid "About Ion"
-msgstr "Tietoja Ionista"
+msgid "Recursive table - unable to deepcopy"
+msgstr "Rekursiivinen taulu - ei voida syväkopioida."
-msgid "XTerm"
+msgid ""
+"Making the following minimal emergency mappings:\n"
+" F2 -> xterm\n"
+" F11 -> restart\n"
+" F12 -> exit\n"
+" Mod1+C -> close\n"
+" Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
msgstr ""
+"Tehdään seuraavat vähimmäiset hätäsidonnat:\n"
+" F2 -> xterm\n"
+" F11 -> uudelleenkäynnistys\n"
+" F12 -> lopetus\n"
+" Mod1+C -> sulkeminen\n"
+" Mod1+K P/N -> vaihto kehyksen sisällä\n"
-msgid "W3M"
-msgstr ""
+msgid "Unable to append to non-table menu"
+msgstr "Ei voida lisätä valikkoon, koska sitä ei ole määritelty tauluna "
-msgid "Rxvt"
-msgstr ""
+msgid "Cannot save selection."
+msgstr "Ei voida tallettaa valintaa."
-msgid "Opera"
-msgstr ""
+msgid "Save look selection in %s?"
+msgstr "Talletaanko ulkonäköasetus tiedostoon %s?"
-msgid "Links"
-msgstr ""
+msgid "ion-statusd quit."
+msgstr "ion-statusd päätti suorituksen."
-msgid "Konqueror"
-msgstr ""
+msgid "Errors starting ion-statusd:\n"
+msgstr "Ion-statusd:n käynnistysvirheet:\n"
-msgid "Dillo"
-msgstr ""
+msgid "Failed to start ion-statusd."
+msgstr "Ion-statusd:n käynnistys eopäonnistui."
-#
-msgid "Run..."
-msgstr "Suorita..."
+msgid "Screen not found."
+msgstr "Ruutua ei löytynyt."
-msgid "Save"
-msgstr "Talleta"
+msgid "Screen already has an stdisp. Refusing to create a statusbar."
+msgstr "Ruudulla on jo tilanäyttö. Kieltäydytään luomasta tilariviä."
-msgid "Restart"
-msgstr "Uudelleenkäynnistä"
+msgid "Failed to create statusbar."
+msgstr "Epäonnistuttiin tilarivin luonnissa"
-msgid "Restart TWM"
-msgstr "Käynnistä TWM"
+msgid "Split current frame vertically."
+msgstr "Halkaise tämänhetkinen kehys pystysuunnassa."
-msgid "Exit"
-msgstr "Poistu"
+msgid "Go to frame above/below/right/left of current frame."
+msgstr ""
+"Siirry tämänhetkisen kehyksen yllä/alla/vasemmalle/oikealla olevaan "
+"kehykseen."
-msgid "Kill"
-msgstr "Tapa"
+msgid "Split current frame horizontally."
+msgstr "Halkaise tämänhetkinen kehys vaakasuunnassa."
-msgid "Toggle tag"
-msgstr "Muuta lippua"
+msgid "Destroy current frame."
+msgstr "Tuhoa tämänhetkinen kehys."
-msgid "Attach tagged"
-msgstr "Liitä merkityt"
+msgid "Tile frame, if no tiling exists on the workspace"
+msgstr "Laatoita kehys, jos työpöydällä ei ole kehystä"
-msgid "Clear tags"
-msgstr "Poista merkinnät"
+#
+msgid "Destroy frame"
+msgstr "Tuhoa kehys"
-msgid "Window info"
-msgstr "Ikkunan tiedot"
+#
+#
+msgid "Split vertically"
+msgstr "Jaa pystysuunnassa"
#
-msgid "New workspace"
-msgstr "Uusi työpöytä"
+#
+msgid "Split horizontally"
+msgstr "Jaa vaakasuunnassa"
-msgid "New empty workspace"
-msgstr "Uusi tyhjä työpöytä"
+#
+msgid "Flip"
+msgstr "Peilaa"
#
-msgid "Close workspace"
-msgstr "Sulje työpöytä"
+msgid "Transpose"
+msgstr "Käännä"
-msgid "Move one character forward/backward."
-msgstr "Siirry yksi merkki eteen/taakse."
+msgid "Untile"
+msgstr "Hajoita laatoitus"
-msgid "Go to end/beginning."
-msgstr "Mene rivin alkuun/loppuun."
+msgid "Float split"
+msgstr "Kelluta"
-msgid "Skip one word forward/backward."
-msgstr "Ohita yksi sana eteen/taaksepäin"
+msgid "At left"
+msgstr "Vasemmalla"
-msgid "Delete next character."
-msgstr "Poista seuraava merkki."
+msgid "At right"
+msgstr "Oikealla"
-msgid "Delete previous character."
-msgstr "Tuhoa edellinen merkki."
+msgid "Above"
+msgstr "Yläpuolella"
-msgid "Delete one word forward/backward."
-msgstr "Tuhoa yksi sana eteen/taakse."
+msgid "Below"
+msgstr "Alapuolella"
-msgid "Delete to end of line."
-msgstr "Tuhoa merkit rivin loppuun saakka."
+#
+msgid "At root"
+msgstr "Juuressa"
-msgid "Delete the whole line."
-msgstr "Tuhoa koko rivi."
+msgid "New tiling"
+msgstr "Uusi laatoitus"
-msgid "Transpose characters."
-msgstr "Transponoi merkit."
+msgid "Close the menu."
+msgstr "Sulje valikko."
#
-msgid "Select next/previous (matching) history entry."
-msgstr "Näytä seuraava/edellinen vastaus muistista."
+#
+msgid "Activate current menu entry."
+msgstr "Suorita valinta."
-msgid "Paste from the clipboard."
-msgstr "Liimaa teksti leikelaudalta."
+msgid "Select next/previous menu entry."
+msgstr "Siirry seuraavaan/edelliseen valintaan."
-#
-msgid "Set mark/begin selection."
-msgstr "Aloita tekstin valinta."
+msgid "Clear the menu's typeahead find buffer."
+msgstr "Tyhjää valikon hakupuskuri."
-#
-msgid "Cut selection."
-msgstr "Leikkaa valittu teksti."
+msgid "Toggle floating dock."
+msgstr "Näytä/piiloita kelluva laituri (dock)."
-#
-msgid "Copy selection."
-msgstr "Kopioi valittu teksti."
+msgid "Pos-TL"
+msgstr "Paikka: ylävasen"
-#
-msgid "Clear mark/cancel selection."
-msgstr "Lopeta tekstin valinta."
+msgid "Pos-TR"
+msgstr "Paikka: yläoikea"
-msgid "Try to complete the entered text or cycle through completions."
-msgstr "Yritä täydentää syötetty teksti tai selaa täydennyksiä."
+msgid "Pos-BL"
+msgstr "Paikka: alavasen"
-msgid "Complete from history"
-msgstr "Täydennä historiasta"
+msgid "Pos-BR"
+msgstr "Paikka: alaoikea"
-msgid "Close the query and execute bound action."
-msgstr "Sulje kysely ja suorita sidottu toiminta."
+msgid "Grow-L"
+msgstr "Kasvu: vasemmalle"
-msgid "Close the query/message box, not executing bound actions."
-msgstr "Sulje kysely/viesti suorittamatta sidottuja toimintoja."
+msgid "Grow-R"
+msgstr "Kasvu: oikealle"
-msgid "Scroll the message or completions up/down."
-msgstr "Vieritä viestiä tai täydennyksiä ylös/alas."
+msgid "Grow-U"
+msgstr "Kasvu: ylös"
+
+msgid "Grow-D"
+msgstr "Kasvu: alas"
msgid "press"
msgstr "painallus"
msgid "%s %s at %s"
msgstr "%s %s osassa %s"
+#~ msgid "Tag current object within the frame."
+#~ msgstr "Merkitse kehyksen tällä hetkellä näyttämä kappale."
+
+#~ msgid "Xinerama sanity check failed; overlapping screens detected."
+#~ msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja."
+
+#~ msgid "Xinerama sanity check failed; zero size detected."
+#~ msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja."
+
+#~ msgid ""
+#~ "Don't know how to get Xinerama information for multiple X root windows."
+#~ msgstr "Xinerama-tietoa ei osata käyttää usealle juuri-ikkunalle."
+
+#~ msgid "Error retrieving Xinerama information."
+#~ msgstr "Xinerama-tietoja ei saatu."
+
+#~ msgid "Unable to setup Xinerama screen %d."
+#~ msgstr "Xinerama-ruudun %d hallittavaksi saattaminen epäonnistui."
+
+#~ msgid "Unable to setup X screen %d."
+#~ msgstr "X-ruudun %d hallittavaksi saattaminen epäonnistui."
+
+#
+#~ msgid "Refusing to destroy - not empty."
+#~ msgstr "Tuhoamisesta kieltäydytään - ei tyhjä."
+
+#
+#~ msgid "Workspace not empty - refusing to destroy."
+#~ msgstr "Työpöytää ei voida tuhota, koska se ei ole tyhjä."
+
+#~ msgid "Nil frame."
+#~ msgstr "Kehys on asettamatta."
+
+#~ msgid "The frame is not managed by the workspace."
+#~ msgstr "Kehys ei ole tämän työpöydän hallinnoima."
+
+#~ msgid "Already detached"
+#~ msgstr "Irroitettu jo"
+
+#~ msgid "Use Xinerama screen information (default: 1/yes)"
+#~ msgstr "Hyödynnä Xineramaa (oletus: 1/kyllä)"
+
+#~ msgid "Ignored: not compiled with Xinerama support"
+#~ msgstr "Jätetään huomiotta: ohjelmaa ei ole käännetty Xinerama-tuella"
+
+#~ msgid "Invalid parameter to -xinerama."
+#~ msgstr "Virheellinen parametri -xinerama:lle"
+
+#~ msgid "Use Xinerama screen information (default: 0/no)"
+#~ msgstr "Hyödynnä Xineramaa (oletus: 0/ei)"
+
+#~ msgid "Detach window from tiled frame"
+#~ msgstr "Irroita ikkuna laatoitetusta kehyksestä"
+
+#
+#~ msgid "New workspace"
+#~ msgstr "Uusi työpöytä"
+
+#~ msgid "New empty workspace"
+#~ msgstr "Uusi tyhjä työpöytä"
+
+#
+#~ msgid "Close workspace"
+#~ msgstr "Sulje työpöytä"
+
#~ msgid "Could not find a complete workspace class. Please load some modules."
#~ msgstr ""
#~ "Yhtäkään täydellistä työpöytäluokkaa ei löydy. Ole hyvä ja lataa joitakin "
#~ msgid "Restart PWM"
#~ msgstr "Käynnistä PWM"
-#~ msgid "Refresh list"
-#~ msgstr "Virkistä lista"
+msgid "Refresh list"
+msgstr "Virkistä lista"
#~ msgid "Unable to create workspace: no screen."
#~ msgstr "Ei voida luoda työpöytää: ei ruutua."
+++ /dev/null
-# translation of ru.po to RUSSIAN
-# #
-# This file is distributed under the same license as the Ion3 package.
-# Vassily Leushin <basileus@kirov.lug.ru>, 2006.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: ru\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-10-11 18:33+0300\n"
-"PO-Revision-Date: 2006-02-01 19:55+0300\n"
-"Last-Translator: Vassily Leushin <basileus@kirov.lug.ru>\n"
-"Language-Team: RUSSIAN <ru@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=KOI8-R\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Russian\n"
-"X-Poedit-Country: RUSSIAN FEDERATION\n"
-"X-Generator: KBabel 1.10.1\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../ioncore/conf-bindings.c:96
-msgid "Insane key combination."
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÂÉÎÁÃÉÑ ËÌÁ×ÉÛ."
-
-#: ../ioncore/conf-bindings.c:100
-msgid "Could not convert keysym to keycode."
-msgstr "îÅ ÍÏÇÕ ÐÅÒÅ×ÅÓÔÉ keysym × keycode"
-
-#: ../ioncore/conf-bindings.c:111
-#, c-format
-msgid "Unknown button \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ËÎÏÐËÁ \"%s\" "
-
-#: ../ioncore/conf-bindings.c:116
-msgid "Insane button combination."
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÂÉÎÁÃÉÑ ËÎÏÐÏË"
-
-#: ../ioncore/conf-bindings.c:123
-#: ../ioncore/conf-bindings.c:130
-msgid "Insane modifier combination."
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÂÉÎÁÃÉÑ ÍÏÄÉÆÉËÁÔÏÒÏ×"
-
-#: ../ioncore/conf-bindings.c:168
-#, c-format
-msgid "Can not wait on modifiers when no modifiers set in \"%s\"."
-msgstr "ïÖÉÄÁÎÉÅ ÍÏÄÉÆÉËÁÔÏÒÏ× ÎÅ×ÏÚÍÏÖÎÏ, ÅÓÌÉ ÏÎÉ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÙ × \"%s\" "
-
-#: ../ioncore/conf-bindings.c:186
-#, c-format
-msgid "Unable to add binding %s."
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÐÒÉ×ÑÚËÕ %s."
-
-#: ../ioncore/conf-bindings.c:191
-#, c-format
-msgid "Unable to remove binding %s."
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÐÒÉ×ÑÚËÕ %s."
-
-#: ../ioncore/conf-bindings.c:230
-#, c-format
-msgid "Unable to add submap for binding %s."
-msgstr ""
-
-#
-#: ../ioncore/conf-bindings.c:260
-msgid "Binding type not set."
-msgstr "ôÉÐ ÐÒÉ×ÑÚËÉ ÎÅ ÕÓÔÁÎÏ×ÌÅÎ"
-
-#: ../ioncore/conf-bindings.c:270
-#, c-format
-msgid "Unknown binding type \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÐÒÉ×ÑÚËÉ \"%s\"."
-
-#: ../ioncore/conf-bindings.c:291
-#, c-format
-msgid "Unknown area \"%s\" for binding %s."
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÂÌÁÓÔØ \"%s\" ÄÌÑ ÐÒÉ×ÑÚËÉ %s."
-
-#: ../ioncore/conf-bindings.c:332
-#, c-format
-msgid "Unable to get bindmap entry %d."
-msgstr ""
-
-#: ../ioncore/conf-bindings.c:374
-msgid "Unable to convert keysym to string."
-msgstr "îÅ ÍÏÇÕ ÐÅÒÅ×ÅÓÔÉ keysym × ÓÔÒÏËÕ."
-
-#: ../ioncore/conf-bindings.c:388
-msgid "Unable to convert button to string."
-msgstr "îÅ ÍÏÇÕ ÐÅÒÅ×ÅÓÔÉ ËÎÏÐËÕ × ÓÔÒÏËÕ."
-
-#
-#: ../ioncore/event.c:78
-msgid "Time request from X server failed."
-msgstr "îÅÕÄÁÞÎÙÊ ÚÁÐÒÏÓ ×ÒÅÍÅÎÉ ÏÔ X ÓÅÒ×ÅÒÁ"
-
-#
-#: ../ioncore/exec.c:101
-msgid "Could not find a root window."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ËÏÒÎÅ×ÏÅ ÏËÎÏ."
-
-#: ../ioncore/exec.c:134
-msgid "reading a pipe"
-msgstr "ÞÔÅÎÉÅ ÉÚ ËÁÎÁÌÁ"
-
-#
-#: ../ioncore/exec.c:296
-msgid "Not saving state: running under session manager."
-msgstr "óÏÓÔÏÑÎÉÅ ÎÅ ÓÏÈÒÁÎÅÎÏ: ÒÁÂÏÔÁ ÐÏÄ ÍÅÎÅÄÖÅÒÏÍ ÓÅÓÓÉÊ."
-
-#: ../ioncore/strings.c:107
-#: ../ioncore/strings.c:143
-msgid "Invalid multibyte string."
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ÍÎÏÇÏÂÁÊÔÎÁÑ ÓÔÒÏËÁ"
-
-#: ../ioncore/strings.c:234
-#, c-format
-msgid "Error compiling regular expression: %s"
-msgstr "ïÛÉÂËÁ ËÏÍÐÉÌÑÃÉÉ ÒÅÇ. ×ÙÒÁÖÅÎÉÑ: %s"
-
-#: ../ioncore/modules.c:158
-msgid "Invalid module name."
-msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÉÍÑ ÍÏÄÕÌÑ."
-
-#
-#: ../ioncore/modules.c:170
-msgid "The module is already loaded."
-msgstr "äÁÎÎÙÊ ÍÏÄÕÌØ ÕÖÅ ÚÁÇÒÕÖÅÎ."
-
-#: ../ioncore/modules.c:185
-msgid "Module version information not found or version mismatch. Refusing to use."
-msgstr ""
-"éÎÆÏÒÍÁÃÉÑ Ï ×ÅÒÓÉÉ ÍÏÄÕÌÑ ÎÅ ÎÁÊÄÅÎÁ, ÉÌÉ ÎÅÓÏÏÔ×ÅÔÓÔ×ÉÅ ×ÅÒÓÉÊ "
-"ïÔËÁÚ × ÉÓÐÏÌØÚÏ×ÁÎÉÉ."
-
-#: ../ioncore/modules.c:196
-#, c-format
-msgid "Unable to initialise module %s."
-msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍÏÄÕÌØ %s ."
-
-#: ../ioncore/modules.c:220
-#: ../../libextl/readconfig.c:368
-#, c-format
-msgid "Unable to find '%s' on search path."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ '%s' × ÐÕÔÉ ÐÏÉÓËÁ."
-
-#: ../ioncore/modules.c:291
-msgid "Unknown module."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÍÏÄÕÌØ."
-
-#: ../ioncore/modules.c:299
-msgid "Unable to initialise module."
-msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍÏÄÕÌØ."
-
-#: ../ioncore/modules.c:344
-msgid "No module to load given."
-msgstr "îÅ ÕËÁÚÁÎ ÍÏÄÕÌØ ÄÌÑ ÚÁÇÒÕÚËÉ."
-
-#: ../ioncore/screen.c:301
-msgid "act: "
-msgstr "act: "
-
-#: ../ioncore/screen.c:490
-msgid "Invalid offset."
-msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÏÔÓÔÕÐ."
-
-#: ../ioncore/screen.c:535
-msgid "Could not find a complete workspace class. Please load some modules."
-msgstr ""
-"îÅ ÍÏÇÕ ÎÁÊÔÉ ËÌÁÓÓ ÐÏÌÎÏÇÏ ÒÁÂÏÞÅÇÏ ÓÔÏÌÁ. ðÏÖÁÌÕÊÓÔÁ "
-"ÚÁÇÒÕÚÉÔÅ ËÁËÉÅ-ÎÉÂÕÄØ ÍÏÄÕÌÉ."
-
-#: ../ioncore/screen.c:545
-#, c-format
-msgid "Unable to create a workspace on screen %d."
-msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÒÁÂ. ÐÒÏÓÔÒÁÎÓÔ×Ï ÎÁ ÜËÒÁÎÅ %d ."
-
-#: ../ioncore/signal.c:291
-#, c-format
-msgid "Caught fatal signal %d. Dying without deinit."
-msgstr "ðÒÉÎÑÔ ÆÁÔÁÌØÎÙÊ ÓÉÇÎÁÌ %d. õÍÉÒÁÀ ÂÅÚ deinit'Á."
-
-#: ../ioncore/signal.c:300
-#, c-format
-msgid "Caught signal %d. Dying."
-msgstr "ðÏÌÕÞÅÎ ÓÉÇÎÁÌ %d. õÍÉÒÁÀ."
-
-#: ../ioncore/sizehint.c:150
-msgid "Invalid client-supplied width/height increment."
-msgstr "ðÏÌÕÞÅÎ ÎÅÐÒÁ×ÉÌØÎÙÊ ÉÎËÒÅÍÅÎÔ ÛÉÒÉÎÙ/×ÙÓÏÔÙ ÏÔ ËÌÉÅÎÔÁ."
-
-#: ../ioncore/sizehint.c:158
-msgid "Invalid client-supplied aspect-ratio."
-msgstr "ðÏÌÕÞÅÎÙ ÎÅÐÒÁ×ÉÌØÎÙÅ ÐÒÏÐÏÒÃÉÉ ÏÔ ËÌÉÅÎÔÁ."
-
-#: ../ioncore/ioncore.c:66
-msgid ""
-"This program is free software; you can redistribute it and/or\n"
-"modify it under the terms of the GNU Lesser General Public\n"
-"License as published by the Free Software Foundation; either\n"
-"version 2.1 of the License, or (at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
-"Lesser General Public License for more details.\n"
-msgstr ""
-
-#: ../ioncore/ioncore.c:385
-#, c-format
-msgid "Could not connect to X display '%s'"
-msgstr "îÅ ÍÏÇÕ ÓÏÅÄÉÎÉÔØÓÑ Ó X ÄÉÓÐÌÅÅÍ '%s'"
-
-#: ../ioncore/ioncore.c:438
-msgid "Could not find a screen to manage."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÜËÒÁÎ ÄÌÑ ÕÐÒÁ×ÌÅÎÉÑ."
-
-#: ../ioncore/xic.c:43
-msgid "Failed to open input method."
-msgstr "íÅÔÏÄ ××ÏÄÁ ÎÅ ÏÔËÒÙÔ."
-
-#: ../ioncore/xic.c:48
-msgid "Input method doesn't support any style."
-msgstr "íÅÔÏÄ ××ÏÄÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÓÔÉÌÉ"
-
-#: ../ioncore/xic.c:63
-msgid "input method doesn't support my preedit type."
-msgstr "íÅÔÏÄ ××ÏÄÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÍÏÊ ÔÉÐ preedit'Á. "
-
-#: ../ioncore/xic.c:91
-msgid "Failed to create input context."
-msgstr "ëÏÎÔÅËÓÔ ××ÏÄÁ ÎÅ ÓÏÚÄÁÎ."
-
-#: ../ioncore/clientwin.c:376
-#, c-format
-msgid "The transient_for hint for \"%s\" points to itself."
-msgstr "èÉÎÔ transient_for ÄÌÑ \"%s\" ÕËÁÚÙ×ÁÅÔ ÎÁ ÓÁÍÏÇÏ ÓÅÂÑ."
-
-#: ../ioncore/clientwin.c:380
-#, c-format
-msgid "Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" multi-parent brain damage?)"
-msgstr ""
-
-#: ../ioncore/clientwin.c:385
-#, c-format
-msgid "The transient_for window for \"%s\" is not on the same screen."
-msgstr "ïËÎÏ transient_for ÄÌÑ \"%s\" ÎÅ ÎÁ ÔÏÍ ÖÅ ÜËÒÁÎÅ."
-
-#: ../ioncore/clientwin.c:405
-#: ../ioncore/clientwin.c:492
-#: ../ioncore/clientwin.c:1554
-#, c-format
-msgid "Window %#x disappeared."
-msgstr "ïËÎÏ %#x ÉÓÞÅÚÌÏ."
-
-#: ../ioncore/clientwin.c:512
-msgid "Unable to find a matching root window!"
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÅ ËÏÒÎÅ×ÏÅ ÏËÎÏ!"
-
-#: ../ioncore/clientwin.c:547
-#, c-format
-msgid "Unable to manage client window %#x."
-msgstr "îÅ ÍÏÇÕ ÕÐÒÁ×ÌÑÔØ ËÌÉÅÎÔÓËÉÍ ÏËÎÏÍ %#x."
-
-#: ../ioncore/clientwin.c:597
-msgid "Changes is WM_TRANSIENT_FOR property are unsupported."
-msgstr ""
-
-#
-#: ../ioncore/clientwin.c:874
-msgid "Client does not support the WM_DELETE protocol."
-msgstr "ëÌÉÅÎÔ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÐÒÏÔÏËÏÌ WM_DELETE. "
-
-#: ../ioncore/clientwin.c:1103
-#: ../mod_ionws/ionws.c:76
-#: ../mod_floatws/floatws.c:103
-#, c-format
-msgid "Error reparenting %s."
-msgstr "ïÛÉÂËÁ ÐÅÒÅÎÁÚÎÁÞÅÎÉÑ ÒÏÄÉÔÅÌÑ %s."
-
-#: ../ioncore/clientwin.c:1560
-msgid "Saved client window does not want to be managed."
-msgstr "óÏÈÒÁÎÅÎÎÏÅ ÏËÎÏ ËÌÉÅÎÔÁ ÎÅ ÈÏÞÅÔ ÂÙÔØ ÐÏÄ ÕÐÒÁ×ÌÅÎÉÅÍ."
-
-#
-#: ../ioncore/colormap.c:96
-msgid "Unable to store colourmap watch info."
-msgstr ""
-
-#: ../ioncore/region.c:36
-msgid "Creating region with negative width or height!"
-msgstr "óÏÚÄÁÎÉÅ ÒÅÇÉÏÎÁ Ó ÏÔÒÉÃÁÔÅÌØÎÏÊ ×ÙÓÏÔÏÊ ÉÌÉ ÛÉÒÉÎÏÊ!"
-
-#: ../ioncore/region.c:84
-#, c-format
-msgid "Destroying object \"%s\" with client windows as children."
-msgstr "õÄÁÌÅÎÉÅ ÏÂßÅËÔÁ \"%s\" Ó ÏËÎÁÍÉ ËÌÉÅÎÔÁ ËÁË ÐÏÔÏÍËÁÍÉ."
-
-#: ../ioncore/attach.c:80
-msgid "Unable to reparent."
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÎÁÚÎÁÞÉÔØ ÒÏÄÉÔÅÌÑ."
-
-#: ../ioncore/attach.c:112
-#: ../ioncore/frame-pointer.c:295
-#, c-format
-msgid "Attempt to make region %s manage its ancestor %s."
-msgstr "ðÏÐÙÔËÁ ÕÐÒÁ×ÌÅÎÉÑ ÒÅÇÉÏÎÏÍ %s ÅÇÏ ÐÒÅÄËÏÍ %s."
-
-#
-#: ../ioncore/defer.c:93
-msgid "Object destroyed while deferred actions are still pending."
-msgstr "ïÂßÅËÔ ÕÄÁÌÅÎ ÐÒÉ ÏÔÌÏÖÅÎÎÏÍ ÄÅÊÓÔ×ÉÉ."
-
-#: ../ioncore/manage.c:90
-msgid "Unable to find a screen for a new client window."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÜËÒÁÎ ÄÌÑ ÎÏ×ÏÇÏ ËÌÉÅÎÔÓËÏÇÏ ÏËÎÁ."
-
-#: ../ioncore/manage.c:187
-#, c-format
-msgid "Unable to rescue \"%s\"."
-msgstr "îÅ ÍÏÇÕ ÓÐÁÓÔÉ \"%s\"."
-
-#: ../ioncore/rootwin.c:222
-#, c-format
-msgid "Unable to redirect root window events for screen %d."
-msgstr "îÅ ÍÏÇÕ ÐÅÒÅÎÁÐÒÁ×ÉÔØ ÓÏÂÙÔÉÑ ËÏÒÎÅ×ÏÇÏ ÏËÎÁ ÄÌÑ ÜËÒÁÎÁ %d."
-
-#: ../ioncore/rootwin.c:316
-msgid "Xinerama sanity check failed; overlapping screens detected."
-msgstr "ðÒÏ×ÅÒËÁ Xinerama ÎÅ ÕÄÁÌÁÓØ; ÏÂÎÁÒÕÖÅÎÏ ÎÁÌÏÖÅÎÉÅ ÜËÒÁÎÏ×."
-
-#: ../ioncore/rootwin.c:342
-msgid "Don't know how to get Xinerama information for multiple X root windows."
-msgstr "îÅ ÚÎÁÀ ËÁË ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ ÐÏ ÍÎÏÖÅÓÔ×ÅÎÎÙÍ ËÏÒÎÅ×ÙÍ ÏËÎÁÍ × Xinerama."
-
-#: ../ioncore/rootwin.c:378
-#, c-format
-msgid "Unable to setup Xinerama screen %d."
-msgstr "îÅ ÍÏÇÕ ÎÁÓÔÒÏÉÔØ ÜËÒÁÎ Xinerama %d."
-
-#: ../ioncore/rootwin.c:389
-#, c-format
-msgid "Unable to setup X screen %d."
-msgstr "îÅ ÍÏÇÕ ÎÁÓÔÒÏÉÔØ ÜËÒÁÎ X %d."
-
-#: ../ioncore/names.c:90
-#, c-format
-msgid "Corrupt instance number %s."
-msgstr "îÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÜËÚÅÍÐÌÑÒÁ %s."
-
-#: ../ioncore/saveload.c:55
-#, c-format
-msgid "Unknown class \"%s\", cannot create region."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ËÌÁÓÓ \"%s\", ÎÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÒÅÇÉÏÎ."
-
-#: ../ioncore/saveload.c:124
-#, c-format
-msgid ""
-"There were errors loading layout. Backing up current layout savefile as\n"
-"%s.\n"
-"If you are _not_ running under a session manager and wish to restore your\n"
-"old layout, copy this backup file over the layout savefile found in the\n"
-"same directory while Ion is not running and after having fixed your other\n"
-"configuration files that are causing this problem. (Maybe a missing\n"
-"module?)\n"
-msgstr ""
-
-#: ../ioncore/saveload.c:167
-msgid "Unable to get file for layout backup."
-msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÒÅÚÅÒ×ÎÙÊ ÆÁÊÌ ÒÁÓÐÏÌÏÖÅÎÉÑ."
-
-#: ../ioncore/saveload.c:171
-#, c-format
-msgid "Backup file %s already exists."
-msgstr "ÒÅÚÅÒ×ÎÙÊ ÆÁÊÌ %s ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ."
-
-#: ../ioncore/saveload.c:177
-msgid "Failed backup."
-msgstr "òÅÚÅÒ×ÎÁÑ ËÏÐÉÑ ÎÅ ÓÏÚÄÁÎÁ."
-
-#
-#: ../ioncore/saveload.c:182
-msgid "Unable to initialise layout on any screen."
-msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÒÁÓÐÏÌÏÖÅÎÉÅ ÎÉ ÎÁ ÏÄÎÏÍ ÜËÒÁÎÅ."
-
-#: ../ioncore/saveload.c:202
-#, c-format
-msgid "Unable to get configuration for screen %d."
-msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ËÏÎÆÉÇÕÒÁÃÉÀ ÜËÒÁÎÁ %d."
-
-#: ../ioncore/saveload.c:215
-msgid "Unable to save layout."
-msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÒÁÓÐÏÌÏÖÅÎÉÅ."
-
-#: ../ioncore/frame.c:122
-msgid "Frame is not empty."
-msgstr "æÒÅÊÍ ÎÅ ÐÕÓÔ."
-
-#: ../ioncore/conf.c:134
-msgid "User directory can not be set."
-msgstr "äÉÒÅËÔÏÒÉÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ."
-
-#: ../ioncore/conf.c:197
-msgid "Some bindmaps were empty, loading ioncore-efbb."
-msgstr ""
-
-#: ../ioncore/fullscreen.c:100
-msgid "Failed to enter full screen mode."
-msgstr "ïÛÉÂËÁ ÐÏÌÎÏÜËÒÁÎÎÏÇÏ ÒÅÖÉÍÁ."
-
-#: ../ioncore/fullscreen.c:158
-msgid "WClientWin failed to return from full screen mode; remaining manager or parent from previous location refused to manage us."
-msgstr ""
-
-#
-#: ../ioncore/mplex.c:1247
-msgid "Invalid position setting."
-msgstr "îÅÐÒÁ×ÉÌØÎÙÅ ÕÓÔÁÎÏ×ËÉ ÍÅÓÔÏÐÏÌÏÖÅÎÉÑ"
-
-#
-#: ../ioncore/mplex.c:1280
-msgid "Invalid action setting."
-msgstr "îÅÐÒÁ×ÉÌØÎÙÅ ÕÓÔÁÎÏ×ËÉ ÄÅÊÓÔ×ÉÑ."
-
-#: ../ioncore/gr.c:119
-#, c-format
-msgid "Drawing engine %s is not registered!"
-msgstr "ä×ÉÖÏË ÏÔÒÉÓÏ×ËÉ %s ÎÅ ÚÁÒÅÇÉÓÔÒÉÒÏ×ÁÎ."
-
-#: ../ioncore/gr.c:138
-#, c-format
-msgid "Unable to find brush for style '%s'."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ËÉÓÔØ ÄÌÑ ÓÔÉÌÑ '%s'."
-
-#: ../ioncore/gr.c:409
-msgid "No drawing engines loaded, trying \"de\"."
-msgstr "îÉ ÏÄÎÏ Ä×ÉÖËÁ ÏÔÒÉÓÏ×ËÉ ÎÅ ÚÁÇÒÕÖÅÎÏ, ÐÒÏÂÕÀ \"ru\"."
-
-#
-#: ../ioncore/hooks.c:219
-msgid "No function given."
-msgstr "îÅÔ ÆÕÎËÃÉÉ."
-
-#: ../mod_ionws/ionws.c:311
-msgid "Unable to create a node for status display."
-msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÕÚÅÌ ÄÌÑ ÐÏËÁÚÁ ÓÔÁÔÕÓÁ."
-
-#: ../mod_ionws/ionws.c:323
-msgid "Unable to create new split for status display."
-msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÎÏ×ÏÅ ÒÁÚÄÅÌÅÎÉÅ ÄÌÑ ÐÏËÁÚÁ ÓÔÁÔÕÓÁ."
-
-#
-#: ../mod_ionws/ionws.c:742
-msgid "Frame not managed by the workspace."
-msgstr "æÒÅÊÍ ÎÅ ÕÐÒÁ×ÌÑÅÔÓÑ ÒÁÂÏÞÉÍ ÓÔÏÌÏÍ."
-
-#
-#: ../mod_ionws/ionws.c:747
-msgid "Invalid direction parameter."
-msgstr "îÅ×ÅÒÎÙÊ ÐÁÒÁÍÅÔÒ ÎÁÐÒÁ×ÌÅÎÉÑ."
-
-#
-#: ../mod_ionws/ionws.c:765
-msgid "Unable to split."
-msgstr "îÅ ÍÏÇÕ ÒÁÚÄÅÌÉÔØ."
-
-#: ../mod_ionws/ionws.c:803
-msgid "Nil frame."
-msgstr "îÕÌÅ×ÏÊ ÆÒÅÊÍ"
-
-#: ../mod_ionws/ionws.c:807
-msgid "The frame is not managed by the workspace."
-msgstr "äÁÎÎÙÊ ÆÒÅÊÍ ÎÅ ÕÐÒÁ×ÌÑÅÔÓÑ ÒÁÂÏÞÉÍ ÓÔÏÌÏÍ."
-
-#: ../mod_ionws/ionws.c:812
-msgid "Frame may not be destroyed."
-msgstr "æÒÅÊÍ ÎÅ ÕÄÁÌÑÅÔÓÑ"
-
-#: ../mod_ionws/ionws.c:817
-msgid "Failed to rescue managed objects."
-msgstr ""
-
-#: ../mod_ionws/ionws.c:1028
-msgid "Nil parameter."
-msgstr "îÕÌÅ×ÏÊ ÐÁÒÁÍÅÔÒ."
-
-#: ../mod_ionws/ionws.c:1033
-msgid "Manager doesn't match."
-msgstr "íÅÎÅÄÖÅÒ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ."
-
-#
-#: ../mod_ionws/ionws.c:1055
-msgid "Could not get split tree."
-msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÄÅÒÅ×Ï ÒÁÚÄÅÌÅÎÉÊ."
-
-#: ../mod_ionws/ionws.c:1076
-msgid "Workspace already has a status display node."
-msgstr "òÁÂÏÞÉÊ ÓÔÏÌ ÕÖÅ ÉÍÅÅÔ ÕÚÅÌ ÐÏËÁÚÁ ÓÔÁÔÕÓÁ."
-
-#
-#: ../mod_ionws/ionws.c:1126
-msgid "Missing region parameters."
-msgstr "ïÔÓÕÔÓÔ×ÕÀÔ ÐÁÒÁÍÅÔÒÙ ÒÅÇÉÏÎÁ."
-
-#: ../mod_ionws/ionws.c:1162
-#: ../mod_ionws/splitfloat.c:783
-msgid "Invalid direction."
-msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÎÁÐÒÁ×ÌÅÎÉÅ"
-
-#
-#: ../mod_ionws/ionws.c:1236
-msgid "No split type given."
-msgstr "îÅÔ ÕËÁÚÁÎ ÔÉÐ ÒÁÚÄÅÌÅÎÉÑ"
-
-#: ../mod_ionws/ionws.c:1249
-msgid "Unknown split type."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÒÁÚÄÅÌÅÎÉÑ"
-
-#
-#
-#: ../mod_ionws/ionws.c:1289
-msgid "The workspace is empty."
-msgstr "òÁÂÏÞÉÊ ÓÔÏÌ ÐÕÓÔ."
-
-#: ../mod_ionws/placement.c:97
-#: ../mod_panews/placement.c:299
-#, c-format
-msgid "Ooops... could not find a region to attach client window to on workspace %s."
-msgstr "ïÊ... ÎÅ ÍÏÇÕ ÎÁÊÔÉ ÒÅÇÉÏÎ ÄÌÑ ÐÒÉÓÏÅÄÉÎÅÎÉÑ ÏËÎÁ ËÌÉÅÎÔÁ ÎÁ ÒÁÂÏÞÅÍ ÓÔÏÌÅ %s."
-
-#: ../mod_ionws/split.c:906
-msgid "REGION_RQGEOM_TRYONLY unsupported for status display."
-msgstr "REGION_RQGEOM_TRYONLY ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ÄÉÓÐÌÅÑ ÓÔÁÔÕÓÁ."
-
-#
-#: ../mod_ionws/split.c:979
-msgid "Invalid node."
-msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÕÚÅÌ."
-
-#
-#: ../mod_ionws/split.c:1044
-msgid "Splitting the status display is not allowed."
-msgstr "òÁÚÄÅÌÅÎÉÅ ÄÉÓÐÌÅÑ ÓÔÁÔÕÓÁ ÎÅ ÄÏÐÕÓËÁÅÔÓÑ."
-
-#: ../mod_ionws/split.c:1072
-#: ../mod_ionws/splitfloat.c:896
-msgid "Unable to split: not enough free space."
-msgstr "îÅ ÍÏÇÕ ÒÁÚÄÅÌÉÔØ: ÎÅÄÏÓÔÁÔÏÞÎÏ Ó×ÏÂÏÄÎÏÇÏ ÐÒÏÓÔÒÁÎÓÔ×Á."
-
-#
-#: ../mod_ionws/split.c:1558
-msgid "Unable to move the status display out of way of transpose."
-msgstr ""
-
-#: ../mod_ionws/split.c:1722
-#, c-format
-msgid "Unable to get configuration for %s."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÎÁÓÔÒÏÊËÉ ÄÌÑ \"%s\"."
-
-#: ../mod_ionws/split-stdisp.c:591
-#: ../mod_ionws/split-stdisp.c:616
-msgid "Status display in bad split configuration."
-msgstr ""
-
-#: ../mod_ionws/split-stdisp.c:657
-msgid "Status display badly located in split tree."
-msgstr "äÉÓÐÌÅÊ ÓÔÁÔÕÓÁ ÐÌÏÈÏ ÒÁÚÍÅÝÅÎ × ÄÅÒÅ×Å ÒÁÚÄÅÌÅÎÉÊ."
-
-#: ../mod_floatws/floatws.c:351
-#: ../mod_panews/panews.c:259
-msgid "Workspace may not be destroyed."
-msgstr "òÁÂÏÞÉÊ ÓÔÏÌ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÕÄÁÌÅÎ."
-
-#: ../mod_floatws/floatws.c:358
-msgid "Failed to rescue some client windows!"
-msgstr "îÅËÏÔÏÒÙÅ ÏËÎÁ ËÌÉÅÎÔÏ× ÎÅ ÓÏÈÒÁÎÅÎÙ!"
-
-#: ../mod_floatws/floatws.c:370
-#: ../mod_panews/panews.c:254
-msgid "Refusing to close non-empty workspace."
-msgstr "ïÔËÁÚ × ÚÁËÒÙÔÉÉ ÎÅ ÐÕÓÔÏÇÏ ÒÁÂ. ÐÒÏÓÔÒÁÎÓÔ×Á."
-
-#
-#: ../mod_floatws/floatws.c:462
-msgid "Failure to create a new frame."
-msgstr "îÏ×ÙÊ ÆÒÅÊÍ ÎÅ ÓÏÚÄÁÎ."
-
-#
-#: ../mod_floatws/floatws.c:1037
-#: ../mod_floatws/floatws.c:1115
-msgid "Region not managed by the workspace."
-msgstr "òÅÇÉÏÎ ÎÅ ÕÐÒÁ×ÌÑÅÔÓÑ ÒÁÂÏÞÉÍ ÓÔÏÌÏÍ."
-
-#: ../mod_floatws/floatws.c:1236
-msgid "No geometry specified."
-msgstr "çÅÏÍÅÔÒÉÑ ÎÅ ÕËÁÚÁÎÁ."
-
-#: ../mod_floatws/placement.c:125
-#, c-format
-msgid "Unknown placement method \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÍÅÔÏÄ ÒÁÚÍÅÝÅÎÉÑ \"%s\"."
-
-#: ../mod_panews/panews.c:193
-msgid "Unable to re-initialise workspace. Destroying."
-msgstr "îÅ ÍÏÇÕ ÒÅÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÒÁÂÏÞÅÅ ÐÒÏÓÔÒÁÎÓÔ×Ï. õÄÁÌÅÎÉÅ."
-
-#: ../mod_panews/placement.c:104
-#: ../mod_panews/placement.c:108
-#: ../mod_panews/placement.c:175
-#: ../mod_panews/placement.c:180
-#, c-format
-msgid "Malfunctioning placement hook; condition #%d."
-msgstr ""
-
-#: ../mod_query/fwarn.c:34
-msgid "Error:\n"
-msgstr "ïÛÉÂËÁ:\n"
-
-#
-#: ../mod_menu/menu.c:490
-msgid "Empty menu."
-msgstr "ðÕÓÔÏÅ ÍÅÎÀ."
-
-#
-#: ../mod_sm/sm.c:110
-msgid "Failed to set session directory."
-msgstr "äÉÒÅËÔÏÒÉÑ ÓÅÓÓÉÉ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ."
-
-#: ../mod_sm/sm_session.c:85
-msgid "Too many ICE connections."
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÓÏÅÄÉÎÅÎÉÊ 'ICE'."
-
-#: ../mod_sm/sm_session.c:227
-msgid "Failed to save session state"
-msgstr "óÏÓÔÏÑÎÉÅ ÓÅÓÓÉÉ ÎÅ ÓÏÈÒÁÎÉÌÏÓØ"
-
-#: ../mod_sm/sm_session.c:246
-msgid "Failed to request save-yourself-phase2 from session manager."
-msgstr ""
-
-#
-#: ../mod_sm/sm_session.c:295
-msgid "SESSION_MANAGER environment variable not set."
-msgstr "ÐÅÒÅÍÅÎÎÁÑ ÏËÒÕÖÅÎÉÑ SESSION_MANAGER ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ."
-
-#: ../mod_sm/sm_session.c:300
-msgid "Session Manager: IceAddConnectionWatch failed."
-msgstr ""
-
-#
-#: ../mod_sm/sm_session.c:325
-msgid "Unable to connect to the session manager."
-msgstr "îÅ ÍÏÇÕ ÓÏÅÄÉÎÉÔØÓÑ Ó ÍÅÎÅÄÖÅÒÏÍ ÓÅÓÓÉÊ."
-
-#: ../mod_sp/main.c:137
-#, c-format
-msgid "Unable to create scratchpad for screen %d."
-msgstr ""
-
-#: ../de/init.c:41
-#, c-format
-msgid "Border attribute %s sanity check failed."
-msgstr ""
-
-#: ../de/init.c:64
-#, c-format
-msgid "Unknown border style \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÓÔÉÌØ ÂÏÒÄÀÒÁ \"%s\"."
-
-#: ../de/init.c:96
-#, c-format
-msgid "Unable to allocate colour \"%s\"."
-msgstr "îÅ ÍÏÇÕ ÒÁÚÍÅÓÔÉÔØ Ã×ÅÔ \"%s\"."
-
-#: ../de/init.c:160
-#, c-format
-msgid "Corrupt substyle table %d."
-msgstr "ðÏ×ÒÅÖÄÅÎÎÁÑ ÔÁÂÌÉÃÁ ÐÏÄÓÔÉÌÅÊ %d."
-
-#: ../de/init.c:193
-#, c-format
-msgid "Unknown text alignment \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÏÅ ×ÙÒÁ×ÎÉ×ÁÎÉÅ ÔÅËÓÔÁ \"%s\"."
-
-#: ../de/init.c:263
-#, c-format
-msgid "'based_on' for %s points back to the style itself."
-msgstr "'based_on' ÄÌÑ %s ÕËÁÚÙ×ÁÅÔ ÎÁ ÓÁÍ ÓÔÉÌØ."
-
-#: ../de/init.c:266
-#, c-format
-msgid "Unknown base style \"%s\"."
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÂÁÚÏ×ÙÊ ÓÔÉÌØ \"%s\"."
-
-#: ../de/font.c:47
-#, c-format
-msgid "Fontset for font pattern '%s' implements context dependent drawing, which is unsupported. Expect clutter."
-msgstr ""
-
-#: ../de/font.c:58
-#, c-format
-msgid "Could not load font \"%s\", trying \"%s\""
-msgstr "îÅ ÍÏÇÕ ÚÁÇÒÕÚÉÔØ ÛÒÉÆÔ \"%s\", ÐÒÏÂÕÀ \"%s\""
-
-#: ../de/style.c:315
-#, c-format
-msgid "Style %s still in use [%d] but the module is being unloaded!"
-msgstr "óÔÉÌØ %s ×ÓÅ ÅÝÅ ÉÓÐÏÌØÚÕÅÔÓÑ [%d] ÎÏ ÍÏÄÕÌØ ×ÙÇÒÕÖÁÅÔÓÑ!"
-
-#: ../ion/ion.c:41
-#: ../pwm/pwm.c:41
-msgid "X display to use"
-msgstr "éÓÐÏÌØÚÏ×ÁÔØ X ÄÉÓÐÌÅÊ"
-
-#: ../ion/ion.c:44
-#: ../pwm/pwm.c:44
-msgid "Configuration file"
-msgstr "æÁÊÌ ËÏÎÆÉÇÕÒÁÃÉÉ"
-
-#: ../ion/ion.c:47
-#: ../pwm/pwm.c:47
-msgid "Add directory to search path"
-msgstr "äÏÂÁ×ÉÔØ ÄÉÒÅËÔÏÒÉÀ Ë ÐÕÔÉ ÐÏÉÓËÁ"
-
-#: ../ion/ion.c:50
-#: ../pwm/pwm.c:50
-msgid "Manage default root window/non-Xinerama screen only"
-msgstr ""
-
-#: ../ion/ion.c:54
-msgid "Use Xinerama screen information (default: 1/yes)"
-msgstr ""
-
-#: ../ion/ion.c:57
-#: ../pwm/pwm.c:57
-msgid "Ignored: not compiled with Xinerama support"
-msgstr "éÇÎÏÒÉÒÕÀ: ÓËÏÍÐÉÌÉÒÏ×ÁÎÏ ÂÅÚ ÐÏÄÄÅÒÖËÉ Xinerama"
-
-#: ../ion/ion.c:61
-#: ../pwm/pwm.c:61
-msgid "Name of session (affects savefiles)"
-msgstr ""
-
-#: ../ion/ion.c:64
-#: ../pwm/pwm.c:64
-msgid "Session manager client ID"
-msgstr ""
-
-#: ../ion/ion.c:67
-#: ../pwm/pwm.c:67
-msgid "Do not create startup error log and display it with xmessage."
-msgstr "îÅ ÓÏÚÄÁ×ÁÔØ ÖÕÒÎÁÌ ÏÛÉÂÏË ÚÁÐÕÓËÁ, Á ÐÏËÁÚÙ×ÁÔØ ÅÇÏ Ó ÐÏÍÏÝØÀ xmessage."
-
-#: ../ion/ion.c:71
-#: ../pwm/pwm.c:71
-msgid "Show this help"
-msgstr "ðÏËÁÚÁÔØ ÐÏÍÏÝØ"
-
-#: ../ion/ion.c:74
-#: ../pwm/pwm.c:74
-msgid "Show program version"
-msgstr "ðÏËÁÚÁÔØ ×ÅÒÓÉÀ ÐÒÏÇÒÁÍÍÙ"
-
-#: ../ion/ion.c:77
-#: ../pwm/pwm.c:77
-msgid "Show about text"
-msgstr "ðÏËÁÚÁÔØ 'ï ÐÒÏÇÒÁÍÍÅ...'"
-
-#: ../ion/ion.c:92
-msgid "Could not get user configuration file directory."
-msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÄÉÒÅËÔÏÒÉÀ Ó ÆÁÊÌÁÍÉ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ÎÁÓÔÒÏÅË "
-
-#: ../ion/ion.c:106
-#, c-format
-msgid "%s/welcome.txt"
-msgstr "%s/welcome.ru.txt"
-
-#: ../ion/ion.c:139
-#: ../pwm/pwm.c:86
-#, c-format
-msgid ""
-"Usage: %s [options]\n"
-"\n"
-msgstr ""
-
-#: ../ion/ion.c:199
-#: ../pwm/pwm.c:149
-msgid "Invalid parameter to -xinerama."
-msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÐÁÒÁÍÅÔÒ ÄÌÑ '-xinerama'."
-
-#
-#: ../ion/ion.c:218
-#: ../pwm/pwm.c:168
-msgid "Invalid command line."
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÎÁÑ ÓÔÒÏËÁ"
-
-#: ../ion/ion.c:239
-msgid "Ion startup error log:\n"
-msgstr "öÕÒÎÁÌ ÏÛÉÂÏË ÚÁÐÕÓËÁ Ion:\n"
-
-#: ../ion/ion.c:249
-#: ../pwm/pwm.c:199
-msgid "Refusing to start due to encountered errors."
-msgstr "÷ ÚÁÐÕÓËÅ ÏÔËÁÚÁÎÏ × ÓÉÌÕ ×ÏÚÎÉËÛÉÈ ÏÛÉÂÏË."
-
-#: ../pwm/pwm.c:54
-msgid "Use Xinerama screen information (default: 0/no)"
-msgstr ""
-
-#: ../pwm/pwm.c:189
-msgid "PWM startup error log:\n"
-msgstr "öÕÒÎÁÌ ÏÛÉÂÏË ÚÁÐÕÓËÁ PWM:\n"
-
-#: ../../libextl/readconfig.c:86
-msgid "$HOME not set"
-msgstr "$HOME ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ"
-
-#: ../../libextl/readconfig.c:113
-msgid "User directory not set. Unable to set session directory."
-msgstr "äÉÒÅËÔÏÒÉÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ. îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÄÉÒÅËÔÏÒÉÀ ÓÅÓÓÉÉ."
-
-#: ../../libextl/readconfig.c:247
-#, c-format
-msgid "Falling back to %s."
-msgstr "ïÔËÁÔ Ë %s."
-
-#: ../../libextl/readconfig.c:441
-#, c-format
-msgid "Unable to create session directory \"%s\"."
-msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÄÉÒÅËÔÏÒÉÀ ÓÅÓÓÉÉ \"%s\"."
-
-#: ../../libextl/luaextl.c:113
-msgid "Lua stack full."
-msgstr "óÔÅË Lua ÐÏÌÏÎ."
-
-#
-#: ../../libextl/luaextl.c:139
-msgid "Unknown Lua error."
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ × Lua."
-
-#: ../../libextl/luaextl.c:456
-msgid "Stack trace:"
-msgstr "ôÒÁÓÓÉÒÏ×ËÁ ÓÔÅËÁ:"
-
-#: ../../libextl/luaextl.c:463
-#, c-format
-msgid ""
-"\n"
-"(Unable to get debug info for level %d)"
-msgstr ""
-"\n"
-"(îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÏÔÌÁÄÏÞÎÕÀ ÉÎÆÏÒÍÁÃÉÀ ÄÌÑ ÕÒÏ×ÎÑ %d)"
-
-#: ../../libextl/luaextl.c:481
-msgid ""
-"\n"
-" [Skipping unnamed C functions.]"
-msgstr ""
-
-#: ../../libextl/luaextl.c:532
-msgid "Internal error."
-msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ."
-
-#: ../../libextl/luaextl.c:551
-msgid "Unable to initialize Lua."
-msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ Lua."
-
-#: ../../libextl/luaextl.c:1277
-msgid "Too many return values. Use a C compiler that has va_copy to support more."
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ×ÏÚ×ÒÁÝÁÅÍÙÈ ÚÎÁÞÅÎÉÊ. éÓÐÏÌØÚÕÊÔÅ ËÏÍÐÉÌÑÔÏÒ C Õ ËÏÔÏÒÏÇÏ ÅÓÔØ va_copy ÄÌÑ ÂÏÌØÛÅÊ ÐÏÄÄÅÒÖËÉ"
-
-#: ../../libextl/luaextl.c:1295
-#, c-format
-msgid "Invalid return value (expected '%c', got lua type \"%s\")."
-msgstr "îÅÄÏÐÕÓÔÉÍÏÅ ×ÏÚ×ÒÁÝÁÅÍÏÅ ÚÎÁÞÅÎÉÅ (ÏÖÉÄÁÌÏÓØ '%c', ÐÏÌÕÞÅÎ lua-ÔÉÐ \"%s\")."
-
-#: ../../libextl/luaextl.c:1330
-#: ../../libextl/luaextl.c:1594
-msgid "Stack full."
-msgstr "óÔÅË ÐÏÌÏÎ."
-
-#: ../../libextl/luaextl.c:1570
-msgid "L1 call handler upvalues corrupt."
-msgstr ""
-
-#: ../../libextl/luaextl.c:1575
-msgid "Called function has been unregistered."
-msgstr ""
-
-#: ../../libextl/luaextl.c:1587
-#, c-format
-msgid "Attempt to call an unsafe function \"%s\" in restricted mode."
-msgstr "ðÏÐÙÔËÁ ×ÙÚÏ×Á ÎÅÂÅÚÏÐÁÓÎÏÊ ÆÕÎËÃÉÉ \"%s\" × ÏÇÒÁÎÉÞÅÎÎÏÍ ÒÅÖÉÍÅ. "
-
-#: ../../libextl/luaextl.c:1603
-#, c-format
-msgid "Argument %d to %s is of invalid type. (Argument template is '%s', got lua type %s)."
-msgstr ""
-
-#: ../../libextl/luaextl.c:1782
-#, c-format
-msgid "Function '%s' has more parameters than the level 1 call handler can handle"
-msgstr ""
-
-#
-#: ../../libextl/luaextl.c:2199
-msgid "Maximal serialisation depth reached."
-msgstr "äÏÓÔÉÇÎÕÔÁ ÍÁËÓÉÍÁÌØÎÁÑ ÇÌÕÂÉÎÁ ÓÅÒÉÁÌÉÚÁÃÉÉ."
-
-#: ../../libextl/luaextl.c:2220
-#, c-format
-msgid "Unable to serialise type %s."
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÅÒÉÁÌÉÚÉÒÏ×ÁÔØ ÔÉÐ %s."
-
-#: ../../libextl/luaextl.c:2251
-msgid "-- This file has been generated by Ion. Do not edit.\n"
-msgstr "-- äÁÎÎÙÊ ÆÁÊÌ ÂÙÌ ÓÏÚÄÁÎ éÏÎÏÍ. îÅ ÒÅÄÁËÔÉÒÏ×ÁÔØ.\n"
-
-#: ../../libextl/misc.c:17
-#, c-format
-msgid "Type checking failed in level 2 call handler for parameter %d (got %s, expected %s)."
-msgstr ""
-
-#: ../etc/cfg_floatws.lua:34
-msgid "Lower the frame."
-msgstr "ïÐÕÓÔÉÔØ ÆÒÅÊÍ"
-
-#: ../etc/cfg_bindings.lua:171
-msgid "Display frame context menu."
-msgstr "ðÏËÁÚÁÔØ ËÏÎÔÅËÓÔÎÏÅ ÍÅÎÀ ÆÒÅÊÍÁ."
-
-#
-#: ../etc/cfg_ionws.lua:44
-msgid "Flip at root"
-msgstr "ðÅÒ×ÅÒÎÕÔØ × ËÏÒÎÅ×ÏÍ"
-
-#
-#: ../etc/cfg_bindings.lua:43
-msgid "Go to n:th screen on multihead setup."
-msgstr ""
-
-#: ../ext_statusbar/ext_statusbar.lua:308
-msgid "Failed to create statusbar."
-msgstr "óÔÁÔÕÓÂÁÒ ÎÅ ÓÏÚÄÁÎ"
-
-#: ../pwm/cfg_pwm_menus.lua:13
-#: ../etc/cfg_menus.lua:10
-msgid "Help"
-msgstr "ðÏÍÏÝØ"
-
-#: ../mod_query/mod_query.lua:566
-msgid "SSH to:"
-msgstr "SSH to:"
-
-#: ../etc/cfg_menus.lua:28
-msgid "Restart"
-msgstr "ðÅÒÅÚÁÐÕÓË"
-
-#: ../mod_menu/mod_menu.lua:231
-msgid "Cannot save selection."
-msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ×ÙÄÅÌÅÎÉÅ"
-
-#: ../etc/cfg_bindings.lua:206
-msgid "End the resize mode."
-msgstr "úÁ×ÅÒÛÉÔØ ÒÅÖÉÍ ÒÁÚÍÅÒÁ."
-
-#
-#
-#: ../etc/cfg_ionws.lua:48
-#: ../etc/cfg_ionws.lua:58
-msgid "Vertically"
-msgstr "÷ÅÒÔÉËÁÌØÎÏ"
-
-#: ../ioncore/ioncore-bindings.lua:34
-msgid "Invalid guard %s."
-msgstr ""
-
-#: ../etc/cfg_bindings.lua:109
-msgid "Query for Lua code to execute."
-msgstr "ïÞÅÒÅÄØ ÎÁ ×ÙÐÏÌÎÅÎÉÅ ËÏÄÁ Lua."
-
-#
-#: ../etc/cfg_bindings.lua:47
-msgid "Go to next/previous screen on multihead setup."
-msgstr " "
-
-#: ../mod_query/mod_query.lua:344
-msgid "none"
-msgstr "ÎÉÞÅÇÏ"
-
-#: ../etc/cfg_bindings.lua:219
-msgid "Shrink in specified direction."
-msgstr "õÍÅÎØÛÉÔØ × ÕËÁÚÁÎÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ"
-
-#: ../etc/cfg_bindings.lua:160
-msgid "Maximize the frame horizontally/vertically."
-msgstr "òÁÚ×ÅÒÎÕÔØ ÆÒÅÊÍ ÐÏ ×ÅÒÔÉËÁÌÉ/ÇÏÒÉÚÏÎÔÁÌÉ."
-
-#: ../etc/cfg_bindings.lua:156
-msgid "Move current object within the frame left/right."
-msgstr "ðÅÒÅÍÅÓÔÉÔØ ÔÅËÕÝÉÊ ÏÂßÅËÔ × ÐÒÅÄÅÌÁÈ ÆÒÅÊÍÁ ×ÐÒÁ×Ï/×ÌÅ×Ï"
-
-#: ../etc/cfg_ionws.lua:12
-msgid "Go to frame above/below/right/left of current frame."
-msgstr "ðÅÒÅÊÔÉ Ë ÆÒÅÊÍÕ ×ÙÛÅ/ÎÉÖÅ/ÐÒÁ×ÅÅ/ÌÅ×ÅÅ ÔÅËÕÝÅÇÏ ÆÒÅÊÍÁ"
-
-#: ../ext_statusbar/ext_statusbar.lua:289
-msgid "Screen not found."
-msgstr "üËÒÁÎ ÎÅ ÎÁÊÄÅÎ"
-
-#: ../etc/cfg_bindings.lua:182
-msgid "Resize the frame."
-msgstr "éÚÍÅÎÉÔØ ÒÁÚÍÅÒ ÆÒÅÊÍÁ"
-
-#: ../etc/cfg_bindings.lua:189
-msgid "Move objects between frames by dragging and dropping the tab."
-msgstr "ðÅÒÅÍÅÓÔÉÔØ ÏÂßÅËÔÙ ÍÅÖÄÕ ÆÒÅÊÍÁÍÉ ÐÒÉ ÐÏÍÏÝÉ ÐÅÒÅÔÁÓËÉ×ÁÎÉÑ ÔÁÂÏ×."
-
-#: ../mod_query/mod_query.lua:99
-msgid "Could not find %s"
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ %s:"
-
-#: ../ext_statusbar/ext_statusbar.lua:295
-msgid "Screen already has an stdisp. Refusing to create a statusbar."
-msgstr "üËÒÁÎ ÕÖÅ ÉÍÅÅÔ stdisp. ïÔËÁÚ × ÓÏÚÄÁÎÉÉ ÓÔÁÔÕÓÂÁÒÁ."
-
-#: ../etc/cfg_bindings.lua:112
-msgid "Query for host to connect to with SSH."
-msgstr "úÁÐÒÏÓ ÈÏÓÔÁ ÄÌÑ ÓÏÅÄÉÎÅÎÉÑ ÞÅÒÅÚ SSH."
-
-#
-#: ../etc/cfg_bindings.lua:229
-msgid "Move in specified direction."
-msgstr "ðÅÒÅÍÅÓÔÉÔØ × ÕËÁÚÁÎÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ."
-
-#
-#: ../ext_statusbar/ext_statusbar.lua:27
-msgid "mail"
-msgstr "ÐÏÞÔÁ"
-
-#: ../mod_query/mod_query.lua:807
-msgid ""
-"\n"
-"Transients:\n"
-msgstr ""
-
-#: ../etc/cfg_menu.lua:21
-msgid "Select next/previous menu entry."
-msgstr "×ÙÂÒÁÔØ ÓÌÅÄ/ÐÒÅÄ ÐÕÎËÔ ÍÅÎÀ"
-
-#: ../ioncore/ioncore-luaext.lua:30
-msgid "Recursive table - unable to deepcopy"
-msgstr "òÅËÕÒÓÉ×ÎÁÑ ÔÁÂÌÉÃÁ - ÇÌÕÂÏËÏÅ ËÏÐÉÒÏ×ÁÎÉÅ ÎÅ×ÏÚÍÏÖÎÏ"
-
-#
-#: ../etc/cfg_bindings.lua:209
-msgid "Grow in specified direction."
-msgstr "÷ÙÒÁÓÔÉ × ÕËÁÚÁÎÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ."
-
-#: ../ioncore/ioncore-bindings.lua:68
-msgid "Invalid command"
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÁ"
-
-#: ../mod_query/mod_query.lua:189
-#: ../mod_menu/mod_menu.lua:245
-msgid "Too much result data"
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ËÏÎÅÞÎÙÈ ÄÁÎÎÙÈ "
-
-#: ../mod_query/mod_query.lua:344
-msgid "Workspace type (%s):"
-msgstr "ôÉÐ ÒÁÂÏÞÅÇÏ ÓÔÏÌÁ (%s):"
-
-#: ../etc/cfg_bindings.lua:36
-msgid "Go to previous active object."
-msgstr "ÐÅÒÅÊÔÉ Ë ÓÌÅÄ. ÁËÔÉ×ÎÏÍÕ ÏÂßÅËÔÕ"
-
-#
-#: ../etc/cfg_query.lua:67
-msgid "Clear mark/cancel selection."
-msgstr "ïÞÉÓÔËÁ ÍÅÔËÉ/ÏÔÍÅÎÁ ×ÙÄÅÌÅÎÉÑ"
-
-#: ../mod_query/mod_query.lua:772
-msgid "No entry '%s'"
-msgstr "îÅÔ ÐÕÎËÔÁ '%s'"
-
-#
-#
-#: ../etc/cfg_bindings.lua:90
-msgid "Toggle fullscreen mode of current client window."
-msgstr "ðÅÒÅËÌÀÞÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ × ÐÏÌÎÏÜËÒÁÎÎÙÊ ÒÅÖÉÍ."
-
-#: ../etc/cfg_bindings.lua:103
-msgid "Query for manual page to be displayed."
-msgstr "úÁÐÒÏÓ ÎÁ ÏÔÏÂÒÁÖÅÎÉÅ ÓÔÒÁÎÉÃÙ man."
-
-#: ../etc/cfg_bindings.lua:51
-msgid "Show the Ion manual page."
-msgstr "ðÏËÁÚÁÔØ ÓÔÒÁÎÉÃÕ ÒÕËÏ×ÏÄÓÔ×Á ÐÏ éÏÎ."
-
-#: ../etc/cfg_bindings.lua:60
-msgid "Display the main menu."
-msgstr "ðÏËÁÚÁÔØ ÇÌÁ×ÎÏÅ ÍÅÎÀ"
-
-#
-#: ../etc/cfg_bindings.lua:54
-msgid "Run a terminal emulator."
-msgstr "úÁÐÕÓË ÜÍÕÌÑÔÏÒÁ ÔÅÒÍÉÎÁÌÁ"
-
-#: ../etc/cfg_bindings.lua:121
-msgid "Query for workspace to go to or create a new one."
-msgstr ""
-
-#: ../etc/cfg_menus.lua:38
-msgid "Kill"
-msgstr "õÂÉÔØ"
-
-#: ../pwm/cfg_pwm_menus.lua:25
-#: ../etc/cfg_menus.lua:37
-msgid "Close"
-msgstr "úÁËÒÙÔØ"
-
-#: ../mod_query/mod_query.lua:381
-msgid "Go to or create workspace:"
-msgstr "ðÅÒÅÊÔÉ Ë ÉÌÉ ÓÏÚÄÁÔØ ÒÁÂÏÞÉÊ ÓÔÏÌ:"
-
-#: ../etc/cfg_query.lua:35
-msgid "Delete one word forward/backward."
-msgstr "õÄÁÌÉÔØ ÏÄÎÏ ÓÌÏ×Ï ×ÐÅÒÅÄÉ/ÓÚÁÄÉ."
-
-#: ../etc/cfg_query.lua:17
-msgid "Go to end/beginning."
-msgstr "ðÅÒÅÊÔÉ × ËÏÎÅÃ/ÎÁÞÁÌÏ"
-
-#
-#: ../etc/cfg_ionws.lua:43
-msgid "Transpose"
-msgstr "ðÅÒÅÍÅÓÔÉÔØ"
-
-#: ../etc/cfg_bindings.lua:152
-msgid "Switch to next/previous object within the frame."
-msgstr "ðÅÒÅËÌÀÞÉÔØÓÑ ÎÁ ÓÌÅÄ/ÐÒÅÄ ÏÂßÅËÔ ×ÎÕÔÒÉ ÆÒÅÊÍÁ."
-
-#: ../mod_query/mod_query.lua:402
-msgid "Restart Ion (y/n)?"
-msgstr "ðÅÒÅÚÁÐÕÓÔÉÔØ éÏÎ (y/n)?"
-
-#: ../mod_query/mod_query.lua:724
-msgid "Lua code: "
-msgstr "ëÏÄ Lua:"
-
-#: ../mod_query/mod_query.lua:367
-msgid "Attach window:"
-msgstr "ðÒÉÃÅÐÉÔØ ÏËÎÏ:"
-
-#: ../etc/cfg_bindings.lua:186
-#: ../etc/cfg_floatws.lua:37
-msgid "Move the frame."
-msgstr "ðÅÒÅÍÅÓÔÉÔØ ÆÒÅÊÍ."
-
-#: ../pwm/cfg_pwm_menus.lua:11
-#: ../etc/cfg_menus.lua:8
-msgid "Programs"
-msgstr "ðÒÏÇÒÁÍÍÙ"
-
-#: ../etc/cfg_query.lua:23
-msgid "Skip one word forward/backward."
-msgstr "ðÒÏÐÕÓÔÉÔØ ÏÄÎÏ ÓÌÏ×Ï ×ÐÅÒÅÄ/ÎÁÚÁÄ."
-
-#: ../mod_query/mod_query.lua:738
-msgid "Unknown menu %s."
-msgstr "îÅÉÚ×ÅÓÔÎÏÅ ÍÅÎÀ %s."
-
-#: ../etc/cfg_floatws.lua:12
-msgid "Backwards-circulate focus and raise the newly focused frame."
-msgstr ""
-
-#: ../etc/cfg_menus.lua:44
-msgid "Window info"
-msgstr "éÎÆÏÒÍÁÃÉÑ Ï ÏËÎÅ"
-
-#
-#: ../etc/cfg_query.lua:58
-msgid "Set mark/begin selection."
-msgstr ""
-
-#: ../etc/cfg_menus.lua:30
-msgid "Restart TWM"
-msgstr "ðÅÒÅÚÁÐÕÓË TWM"
-
-#: ../etc/cfg_ionws.lua:9
-msgid "Split current frame vertically."
-msgstr "òÁÚÄÅÌÉÔØ ÔÅËÕÝÉÊ ÆÒÅÊÍ ÐÏ ×ÅÒÔÉËÁÌÉ"
-
-#
-#
-#: ../etc/cfg_bindings.lua:57
-msgid "Create a new workspace of chosen default type."
-msgstr "óÏÚÄÁÔØ ÎÏ×ÙÊ ÒÁÂÏÞÉÊ ÓÔÏÌ Ó ÔÉÐÏÍ ×ÙÂÒÁÎÎÙÍ ÐÏ-ÕÍÏÌÞÁÎÉÀ."
-
-#
-#: ../etc/cfg_floatws.lua:29
-msgid "Raise the frame."
-msgstr "ðÏÄÎÑÔØ ÆÒÅÊÍ"
-
-#: ../etc/cfg_floatws.lua:46
-msgid "(Un)stick"
-msgstr ""
-
-#: ../mod_query/mod_query.lua:287
-#: ../mod_query/mod_query.lua:297
-msgid "Could not find client window %s."
-msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÏËÎÏ ËÌÉÅÎÔÁ %s."
-
-#: ../etc/cfg_query.lua:82
-msgid "Close the query/message box, not executing bound actions."
-msgstr ""
-
-#
-#: ../etc/cfg_bindings.lua:168
-msgid "Query for a client window to attach to active frame."
-msgstr ""
-
-#: ../mod_query/mod_query.lua:488
-msgid "Run:"
-msgstr "úÁÐÕÓÔÉÔØ:"
-
-#
-#: ../etc/cfg_panews.lua:11
-msgid "Resize the area."
-msgstr "éÚÍÅÎÉÔØ ÒÁÚÍÅÒ ÏÂÌÁÓÔÉ."
-
-#
-#: ../etc/cfg_bindings.lua:95
-msgid "Kill client owning current client window."
-msgstr "õÂÉÔØ ËÌÉÅÎÔÁ ÔÅËÕÝÅÇÏ ÏËÎÁ."
-
-#: ../mod_query/mod_query.lua:595
-msgid "Manual page (%s):"
-msgstr "óÔÒÁÎÉÃÁ ÒÕËÏ×ÏÄÓÔ×Á (%s):"
-
-#
-#: ../etc/cfg_bindings.lua:124
-msgid "Query for a client window to go to."
-msgstr ""
-
-#
-#: ../etc/cfg_ionws.lua:39
-msgid "Destroy frame"
-msgstr "õÄÁÌÉÔØ ÆÒÅÊÍ"
-
-#: ../mod_query/mod_query.lua:339
-msgid "Unknown error"
-msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ"
-
-#: ../etc/cfg_bindings.lua:175
-#: ../etc/cfg_panews.lua:8
-msgid "Begin move/resize mode."
-msgstr "÷ÈÏÄ × ÒÅÖÉÍ ÐÅÒÅÍÅÝÅÎÉÑ/ÒÁÚÍÅÒÁ"
-
-#: ../etc/cfg_bindings.lua:136
-msgid "Tag current object within the frame."
-msgstr ""
-
-#: ../etc/cfg_bindings.lua:140
-msgid "Switch to n:th object within the frame."
-msgstr ""
-
-#: ../etc/cfg_bindings.lua:203
-msgid "Cancel the resize mode."
-msgstr "ïÔÍÅÎÁ ÒÅÖÉÍÁ ÒÁÚÍÅÒÁ."
-
-#: ../build/mkman.lua:196
-msgid "%s %s"
-msgstr "%s %s"
-
-#: ../etc/cfg_query.lua:27
-msgid "Delete next character."
-msgstr "õÄÁÌÉÔØ ÓÌÅÄÕÀÝÉÊ ÓÉÍ×ÏÌ"
-
-#: ../mod_query/mod_query.lua:356
-msgid "Go to window:"
-msgstr "ðÅÒÅÊÔÉ Ë ÏËÎÕ:"
-
-#: ../build/mkman.lua:182
-msgid "drag"
-msgstr "ÐÅÒÅÔÁÝÉÔØ"
-
-#: ../build/mkman.lua:181
-msgid "click"
-msgstr "ËÌÉËÎÕÔØ"
-
-#: ../build/mkman.lua:180
-msgid "press"
-msgstr "ÎÁÖÁÔØ"
-
-#: ../etc/cfg_menu.lua:27
-msgid "Clear the menu's typeahead find buffer."
-msgstr ""
-
-#: ../etc/cfg_ionws.lua:47
-msgid "Split"
-msgstr "òÁÚÄÅÌÉÔØ"
-
-#
-#: ../etc/cfg_bindings.lua:98
-msgid "Send next key press to current client window. Some programs may not allow this by default."
-msgstr ""
-
-#: ../etc/cfg_menu.lua:11
-msgid "Close the menu."
-msgstr "úÁËÒÙÔØ ÍÅÎÀ"
-
-#: ../etc/cfg_query.lua:87
-msgid "Scroll the message or completions up/down."
-msgstr ""
-
-#: ../etc/cfg_query.lua:74
-msgid "Close the query and execute bound action."
-msgstr ""
-
-#
-#: ../etc/cfg_bindings.lua:31
-msgid "Switch to next/previous object within current screen."
-msgstr "ðÅÒÅËÌÀÞÉÔØÓÑ ÎÁ ÓÌÅÄ./ÐÒÅÄ. ÏÂßÅËÔ ×ÎÕÔÒÉ ÔÅËÕÝÅÇÏ ÜËÒÁÎÁ."
-
-#: ../etc/cfg_query.lua:39
-msgid "Delete to end of line."
-msgstr "õÄÁÌÉÔØ ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ."
-
-#: ../pwm/cfg_pwm_menus.lua:14
-#: ../etc/cfg_menus.lua:11
-msgid "About Ion"
-msgstr "ï Ion"
-
-#: ../mod_query/mod_query.lua:804
-msgid ""
-"Title: %s\n"
-"Class: %s\n"
-"Role: %s\n"
-"Instance: %s\n"
-"XID: 0x%x"
-msgstr ""
-"îÁÚ×ÁÎÉÅ: %s\n"
-"ëÌÁÓÓ(class): %s\n"
-"òÏÌØ(role): %s\n"
-"üËÚÅÍÐÌÑÒ(instance): %s\n"
-"XID: 0x%x"
-
-#
-#: ../etc/cfg_query.lua:61
-msgid "Cut selection."
-msgstr "÷ÙÒÅÚÁÔØ ×ÙÄÅÌÅÎÎÏÅ."
-
-#: ../etc/cfg_query.lua:53
-msgid "Paste from the clipboard."
-msgstr "÷ÓÔÁ×ÉÔØ ÉÚ ËÌÉÐÂÏÒÄÁ."
-
-#
-#: ../etc/cfg_query.lua:45
-msgid "Select next/previous (matching) history entry."
-msgstr "÷ÙÂÒÁÔØ ÓÌÅÄ./ÐÒÅÄ. (ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ) ÐÕÎËÔ ÉÓÔÏÒÉÉ."
-
-#: ../etc/cfg_menus.lua:43
-msgid "Clear tags"
-msgstr "ïÞÉÓÔÉÔØ ÔÅÇÉ"
-
-#: ../etc/cfg_query.lua:42
-msgid "Delete the whole line."
-msgstr "õÄÁÌÉÔØ ÓÔÒÏËÕ ÃÅÌÉËÏÍ"
-
-#: ../etc/cfg_query.lua:71
-msgid "Try to complete the entered text."
-msgstr "ðÏÐÙÔËÁ ÚÁ×ÅÒÛÉÔØ ××ÅÄÅÎÎÙÊ ÔÅËÓÔ."
-
-#: ../etc/cfg_query.lua:31
-msgid "Delete previous character."
-msgstr "õÄÁÌÉÔØ ÐÒÅÄÙÄÕÝÉÊ ÓÉÍ×ÏÌ."
-
-#: ../mod_query/mod_query.lua:299
-msgid "Cannot attach: different root windows."
-msgstr "îÅ ÍÏÇÕ ÐÒÉÃÅÐÉÔØ: ÒÁÚÎÙÅ ËÏÒÎÅ×ÙÅ ÏËÎÁ."
-
-#: ../build/mkman.lua:183
-msgid "double click"
-msgstr "Ä×ÏÊÎÏÊ ËÌÉË"
-
-#: ../etc/cfg_query.lua:11
-msgid "Move one character forward/backward."
-msgstr "ðÅÒÅÍÅÓÔÉÔØÓÑ ÎÁ ÏÄÉÎ ÓÉÍ×ÏÌ ×ÐÅÒÅÄ/ÎÁÚÁÄ."
-
-#: ../etc/cfg_menus.lua:29
-msgid "Restart PWM"
-msgstr "ðÅÒÅÚÁÐÕÓË PWM"
-
-#: ../etc/cfg_bindings.lua:115
-msgid "Query for file to edit."
-msgstr "úÁÐÒÏÓ ÎÁ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ ÆÁÊÌÁ."
-
-#
-#: ../etc/cfg_bindings.lua:39
-msgid "Clear all tags."
-msgstr "ïÞÉÓÔÉÔØ ×ÓÅ ÔÅÇÉ."
-
-#: ../etc/cfg_bindings.lua:178
-msgid "Switch the frame to display the object indicated by the tab."
-msgstr "ðÅÒÅËÌÀÞÉÔØ ÆÒÅÊÍ ÎÁ ÐÏËÁÚ ÏÂßÅËÔÁ ÕËÁÚÁÎÎÏÇÏ ÔÁÂÏÍ."
-
-#
-#
-#: ../etc/cfg_ionws.lua:50
-#: ../etc/cfg_ionws.lua:60
-msgid "Horizontally"
-msgstr "çÏÒÉÚÏÎÔÁÌØÎÏ"
-
-#: ../pwm/cfg_pwm_menus.lua:16
-#: ../pwm/cfg_pwm_menus.lua:24
-msgid "New"
-msgstr "îÏ×ÙÊ"
-
-#: ../mod_query/mod_query.lua:410
-msgid "Frame name:"
-msgstr "éÍÑ ÆÒÅÊÍÁ:"
-
-#
-#: ../etc/cfg_bindings.lua:18
-msgid "Switch to n:th object (workspace, full screen client window) within current screen."
-msgstr "ðÅÒÅËÌÀÞÉÔØÓÑ ÎÁ n-ÎÙÊ ÏÂßÅËÔ (ÒÁÂ.ÓÔÏÌ, ÐÏÌÎÏÜËÒÁÎÎÏÅ ÏËÎÏ) ×ÎÕÔÒÉ ÔÅËÕÝÅÇÏ ÜËÒÁÎÁ."
-
-#: ../etc/cfg_bindings.lua:64
-msgid "Display the window list menu."
-msgstr "ðÏËÁÚÁÔØ ÍÅÎÀ ÓÐÉÓËÁ ÏËÏÎ."
-
-#: ../etc/cfg_floatws.lua:26
-msgid "Toggle shade mode"
-msgstr "ðÅÒÅËÌÀÞÉÔØ ÒÅÖÉÍ ÔÅÎÉ"
-
-#: ../mod_query/mod_query.lua:393
-msgid "Exit Ion/Shutdown session (y/n)?"
-msgstr "÷ÙÈÏÄ ÉÚ éÏÎ/úÁ×ÅÒÛÉÔØ ÓÅÓÓÉÀ (y/n)?"
-
-#: ../etc/cfg_floatws.lua:15
-msgid "Raise/lower active frame."
-msgstr "ðÏÄÎÑÔØ/ÏÐÕÓÔÉÔØ ÁËÔÉ×ÎÙÊ ÆÒÅÊÍ"
-
-#: ../mod_menu/mod_menu.lua:235
-msgid "Save look selection in %s?"
-msgstr "óÏÈÒÁÎÉÔØ ×ÎÅÛÎÉÊ ×ÉÄ × %s?"
-
-#: ../etc/cfg_bindings.lua:82
-msgid "Close current object."
-msgstr "úÁËÒÙÔØ ÔÅËÕÝÉÊ ÏÂßÅËÔ."
-
-#
-#: ../etc/cfg_query.lua:64
-msgid "Copy selection."
-msgstr "ëÏÐÉÒÏ×ÁÔØ ×ÙÄÅÎÅÎÉÅ"
-
-#: ../etc/cfg_bindings.lua:164
-msgid "Attach tagged objects to this frame."
-msgstr "ðÒÉÃÅÐÉÔØ ÏÂßÅËÔ Ó ÔÅÇÏÍ Ë ÜÔÏÍÕ ÆÒÅÊÍÕ."
-
-#: ../etc/cfg_ionws.lua:57
-msgid "Floating split"
-msgstr "ðÌÁ×ÁÀÝÅÅ ÒÁÚÄÅÌÅÎÉÅ."
-
-#: ../mod_query/mod_query.lua:768
-msgid "%s menu:"
-msgstr "%s ÍÅÎÀ:"
-
-#: ../ext_statusbar/ext_statusbar.lua:318
-msgid "Failed to create a timer for statusbar."
-msgstr "ôÁÊÍÅÒ ÄÌÑ ÓÔÁÔÕÓÂÁÒÁ ÎÅ ÓÏÚÄÁÎ."
-
-#: ../etc/cfg_ionws.lua:52
-#: ../etc/cfg_ionws.lua:62
-msgid "Vertically at root"
-msgstr "÷ÅÒÔÉËÁÌØÎÏ × ËÏÒÎÅ×ÏÍ"
-
-#
-#
-#: ../etc/cfg_menu.lua:16
-msgid "Activate current menu entry."
-msgstr "áËÔÉ×ÉÒÏ×ÁÔØ ÔÅËÕÝÉÊ ÐÕÎËÔ ÍÅÎÀ."
-
-#: ../ioncore/ioncore-efbb.lua:12
-msgid ""
-"Making the following minimal emergency mappings:\n"
-" F2 -> xterm\n"
-" F11 -> restart\n"
-" F12 -> exit\n"
-" Mod1+C -> close\n"
-" Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-msgstr ""
-"Making the following minimal emergency mappings:\n"
-" F2 -> xterm\n"
-" F11 -> restart\n"
-" F12 -> exit\n"
-" Mod1+C -> close\n"
-" Mod1+K P/N -> WFrame.switch_next/switch_prev\n"
-
-#
-#: ../etc/cfg_ionws.lua:45
-msgid "Transpose at root"
-msgstr "ðÅÒÅÍÅÓÔÉÔØ × ËÏÒÎÅ×ÏÍ"
-
-#: ../pwm/cfg_pwm_menus.lua:17
-#: ../etc/cfg_menus.lua:12
-msgid "Styles"
-msgstr "óÔÉÌÉ"
-
-#: ../etc/cfg_bindings.lua:106
-msgid "Query for command line to execute."
-msgstr "úÁÐÒÏÓ ÎÁ ÉÓÐÏÌÎÅÎÉÅ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ"
-
-#: ../mod_query/mod_query.lua:323
-msgid "Unable to create workspace: no screen."
-msgstr "îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÒÁÂÏÞÉÊ ÓÔÏÌ: ÎÅÔ ÜËÒÁÎÁ."
-
-#: ../ext_statusbar/ext_statusbar.lua:27
-msgid "load"
-msgstr "ÚÁÇÒÕÚËÁ"
-
-#
-#: ../etc/cfg_ionws.lua:42
-msgid "Flip"
-msgstr "ðÅÒÅ×ÅÒÎÕÔØ"
-
-#: ../etc/cfg_ionws.lua:41
-msgid "Flip&transpose"
-msgstr "ðÅÒÅ×ÅÒÎÕÔØ É ÐÅÒÅÍÅÓÔÉÔØ"
-
-#: ../pwm/cfg_pwm_menus.lua:12
-#: ../etc/cfg_menus.lua:9
-msgid "Lock screen"
-msgstr "úÁÂÌÏËÉÒÏ×ÁÔØ ÜËÒÁÎ"
-
-#: ../mod_query/mod_query.lua:449
-msgid "Edit file:"
-msgstr "òÅÄÁËÔÉÒÏ×ÁÔØ ÆÁÊÌ:"
-
-#: ../etc/cfg_menus.lua:19
-msgid "XTerm"
-msgstr "XTerm"
-
-#: ../build/mkman.lua:198
-msgid "%s %s at %s"
-msgstr "%s %s ÎÁ %s"
-
-#
-#: ../etc/cfg_bindings.lua:85
-msgid "Nudge current client window. This might help with some programs' resizing problems."
-msgstr ""
-
-#: ../etc/cfg_ionws.lua:22
-msgid "Destroy current frame."
-msgstr "õÄÁÌÉÔØ ÔÅËÕÝÉÊ ÆÒÅÊÍ."
-
-#: ../ioncore/ioncore-bindings.lua:53
-msgid "Error in command string: "
-msgstr "ïÛÉÂËÁ × ÓÔÒÏËÅ ËÏÍÁÎÄÙ:"
-
-#: ../etc/cfg_ionws.lua:19
-msgid "Split current frame horizontally."
-msgstr "òÁÚÄÅÌÉÔØ ÔÅËÕÝÉÊ ÆÒÅÊÍ ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ."
-
-#: ../etc/cfg_menus.lua:42
-msgid "Attach tagged"
-msgstr "ðÒÉÃÅÐÉÔØ ÏËÎÁ Ó ÔÅÇÁÍÉ"
-
-#: ../etc/cfg_ionws.lua:54
-#: ../etc/cfg_ionws.lua:64
-msgid "Horizontally at root"
-msgstr "çÏÒÉÚÏÎÔÁÌØÎÏ × ËÏÒÎÅ×ÏÍ"
-
-#: ../etc/cfg_menus.lua:40
-msgid "(Un)tag"
-msgstr "ðÏÓÔÁ×ÉÔØ/ÕÄÁÌÉÔØ ÔÅÇ"
-
-#: ../mod_query/mod_query.lua:459
-msgid "View file:"
-msgstr "ðÒÏÓÍÏÔÒ ÆÁÊÌÁ:"
-
-#: ../mod_query/mod_query.lua:421
-msgid "Workspace name:"
-msgstr "éÍÑ ÒÁÂÏÞÅÇÏ ÓÔÏÌÁ:"
-
-#: ../etc/cfg_menus.lua:31
-msgid "Exit"
-msgstr "÷ÙÈÏÄ"
-
-#: ../etc/cfg_menus.lua:27
-msgid "Save"
-msgstr "óÏÈÒÁÎÉÔØ"
-
-#
-#: ../pwm/cfg_pwm_menus.lua:15
-msgid "Workspaces"
-msgstr "òÁÂÏÞÉÅ ÓÔÏÌÙ"
-
-#: ../etc/cfg_menus.lua:20
-msgid "Mozilla Firefox"
-msgstr "Mozilla Firefox"
-
-#: ../ioncore/ioncore-bindings.lua:45
-msgid "Error compiling guard: %s"
-msgstr ""
-
-#: ../mod_menu/mod_menu.lua:271
-msgid "Refresh list"
-msgstr "ïÂÎÏ×ÉÔØ ÓÐÉÓÏË"
-
-#: ../etc/cfg_floatws.lua:9
-msgid "Circulate focus and raise the newly focused frame."
-msgstr "ðÅÒÅÄÁÔØ ÆÏËÕÓ É ÐÏÄÎÑÔØ ÆÒÅÊÍ Ó ÎÏ×ÙÍ ÆÏËÕÓÏÍ."
-
-#
-#: ../etc/cfg_menus.lua:21
-msgid "Run..."
-msgstr "÷ÙÐÏÌÎÉÔØ..."
-
-#: ../etc/cfg_bindings.lua:118
-msgid "Query for file to view."
-msgstr "úÁÐÒÏÓ ÐÒÏÓÍÏÔÒÁ ÆÁÊÌÁ."
-
-#: ../mod_query/mod_query.lua:511
-msgid "Failed to open ~/.ssh/known_hosts"
-msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ~/.ssh/known_hosts"
-
-#: ../pwm/cfg_pwm_menus.lua:18
-#: ../etc/cfg_menus.lua:13
-msgid "Session"
-msgstr "óÅÓÓÉÑ"
-
-#: ../pwm/cfg_pwm_menus.lua:27
-msgid "List"
-msgstr "óÐÉÓÏË"
-
--
--- Unbind anything using mod_query and rebinding to mod_menu where
+-- Unbind anything using mod_query and rebind to mod_menu where
-- applicable.
defbindings("WScreen", {
+ bdoc("Display the main menu."),
kpress(ALTMETA.."F12", "mod_menu.menu(_, _sub, 'mainmenu', {big=true})"),
})
defbindings("WMPlex.toplevel", {
kpress(ALTMETA.."F1", nil),
- kpress(META.. "F1", "ioncore.exec_on(_, ':man pwm3')"),
kpress(ALTMETA.."F3", nil),
kpress(META.. "F3", nil),
kpress(ALTMETA.."F4", nil),
kpress(ALTMETA.."F6", nil),
kpress(ALTMETA.."F9", nil),
kpress(META.."G", nil),
- kpress(META.."A", nil),
+
+ bdoc("Show the PWM manual page."),
+ kpress(META.. "F1", "ioncore.exec_on(_, ':man pwm3')"),
+
+ bdoc("Display context menu."),
+ kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
})
-defbindings("WFrame", {
- kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
+defbindings("WFrame.toplevel", {
+ kpress(META.."A", nil),
})
-- Make a new main menu with additional workspace menu.
*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <stdlib.h>
-#define ION_VERSION "3ds-20070318"
+#define ION_VERSION "3rc-20070506"
#define ION_API_VERSION "3-"ION_VERSION