From: Ben Hutchings Date: Tue, 15 May 2007 00:13:09 +0000 (+0000) Subject: [svn-upgrade] Integrating new upstream version, ion3 (20070506) X-Git-Tag: 20070506 X-Git-Url: https://git.decadent.org.uk/gitweb/?p=ion3.git;a=commitdiff_plain;h=ae4260bb64817c11f9a7140324cd3e3ba113e297 [svn-upgrade] Integrating new upstream version, ion3 (20070506) --- diff --git a/ChangeLog b/ChangeLog index ae08861..4410265 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,379 @@ +2007-05-06 14:43 UTC Tuomo Valkonen + tagged ion-3rc-20070506 + +2007-05-06 14:43 UTC Tuomo Valkonen + * Oops + +2007-05-06 14:38 UTC Tuomo Valkonen + * Doc comment fix + +2007-05-06 14:31 UTC Tuomo Valkonen + * predist.sh support for specifying additional repository base path + +2007-05-06 14:26 UTC Tuomo Valkonen + * Release notes date + +2007-05-06 14:23 UTC Tuomo Valkonen + * 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 + * Some more name policy clarifications + +2007-05-06 13:55 UTC Tuomo Valkonen + * Made the scrachpad (scratchws) pseudomodal. + (This will only take effect when a new scratchpad is created.) + +2007-05-06 13:54 UTC Tuomo Valkonen + * Added back pseudomodal option for regions managed by WMPlexes. + +2007-05-06 13:12 UTC Tuomo Valkonen + * Stacking list traversal improvements + +2007-05-06 11:27 UTC Tuomo Valkonen + * Removed redundant code + +2007-05-05 19:04 UTC Tuomo Valkonen + * Doc fix + +2007-05-05 17:36 UTC Tuomo Valkonen + * Update notify window when name of window with activity changes. + +2007-05-05 16:44 UTC Tuomo Valkonen + * *sigh* + +2007-05-04 21:34 UTC Tuomo Valkonen + * Display tab numbers on modifier release. + Seems to work better than delayed display. + +2007-05-04 21:34 UTC Tuomo Valkonen + * Simplified ioncore.tabnum interface. + +2007-05-04 21:29 UTC Tuomo Valkonen + * Added submat_wait called on modifier release. + +2007-05-04 16:10 UTC Tuomo Valkonen + * Increased default tab numbers display delay to 250ms + +2007-05-04 15:57 UTC Tuomo Valkonen + * Draw tab numbers on right, unless tab text alignment is right. + +2007-05-04 15:53 UTC Tuomo Valkonen + * 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 + * Added submap enter events and ungrab hook + +2007-05-04 15:36 UTC Tuomo Valkonen + * Fixed defer to allow NULL parameters + +2007-05-04 06:50 UTC Tuomo Valkonen + * Name policy refinements + +2007-05-03 23:58 UTC Tuomo Valkonen + * Removed useless property setting special case. + +2007-05-03 16:31 UTC Tuomo Valkonen + * Oops. + +2007-05-02 22:06 UTC Tuomo Valkonen + * Some watches weren't being initialised + +2007-05-02 21:59 UTC Tuomo Valkonen + * Release notes updates + +2007-05-02 21:43 UTC Tuomo Valkonen + * Removed obsoleted and redundant WFrame.set_numbers. + (Didn't I do this already?) + +2007-05-02 18:50 UTC Tuomo Valkonen + * Store the region pointer in a Watch in binding handler. + It might get destroyed. + +2007-05-01 14:12 UTC Tuomo Valkonen + * 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 + * 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 + * Documentation fixes and style clean up + +2007-05-01 11:05 UTC Tuomo Valkonen + * Quasiactivate frames for detachs from groups within them too. + +2007-04-30 18:31 UTC Tuomo Valkonen + * More based_on fixes. + (Still missing copying/appending of data_table.) + +2007-04-30 17:59 UTC Tuomo Valkonen + * Detach stacking level fix + +2007-04-30 17:51 UTC Tuomo Valkonen + * Oops, size hints fixing had broken unsqueeze + +2007-04-29 10:47 UTC Tuomo Valkonen + * Style file border tuning + +2007-04-29 10:47 UTC Tuomo Valkonen + * Drawing engine border calculation tuning + +2007-04-29 10:26 UTC Tuomo Valkonen + * Style file tuning + +2007-04-29 10:23 UTC Tuomo Valkonen + * 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 + * Support based_on too after all + +2007-04-28 18:06 UTC Tuomo Valkonen + * Use based_on's based_on + +2007-04-27 23:57 UTC Tuomo Valkonen + * Removed based_on fields from style files + +2007-04-27 23:45 UTC Tuomo Valkonen + * 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 + * Added name policy notice + +2007-04-27 21:50 UTC Tuomo Valkonen + tagged pre-namepolicy-notice + +2007-04-27 16:06 UTC Tuomo Valkonen + * Removed note of removed autoconf script from README + +2007-04-27 15:15 UTC Tuomo Valkonen + * Changed license header in source files + +2007-04-25 13:34 UTC Tuomo Valkonen + * Release notes draft + +2007-04-24 23:53 UTC Tuomo Valkonen + * Fixed dockapp hack with those few that actually have WM_CLASS. + +2007-04-24 14:25 UTC Tuomo Valkonen + * 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 + * Fixes and improvements to previously blind-written code. + +2007-04-24 11:08 UTC Tuomo Valkonen + * Added WFrame.set_grattr/WFrame.is_grattr + +2007-04-24 11:38 UTC Tuomo Valkonen + * Added numbering hack to drawing engine + +2007-04-24 11:23 UTC Tuomo Valkonen + * Drawing engine attribute matching improvements + +2007-04-24 11:22 UTC Tuomo Valkonen + * Oops, const + +2007-04-24 11:08 UTC Tuomo Valkonen + * Added gr_stylespec_isset + +2007-04-24 10:02 UTC Tuomo Valkonen + * Store current frame base style in WFrame.baseattr + instead of reconstructing it all the time. + +2007-04-24 09:08 UTC Tuomo Valkonen + * Removed unused setting from config.h + +2007-04-23 23:26 UTC Tuomo Valkonen + * Fixed size hints ICCCM compliance degradation + code clean-up + +2007-04-23 23:01 UTC Tuomo Valkonen + * 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 + * Place dockapps in the statusbar's systray. + (Added winprop in default `cfg_kludges.lua`.) + +2007-04-22 18:07 UTC Tuomo Valkonen + * 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 + * 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 + * Updated Czech translation + +2007-04-22 10:16 UTC Tuomo Valkonen + * Updated Finnish translation + +2007-04-22 10:10 UTC Tuomo Valkonen + * Man page tuning + +2007-04-22 09:58 UTC Tuomo Valkonen + * Man page binding documentation extraction script improvements. + (To generate better PWM man pages.) + +2007-04-22 09:58 UTC Tuomo Valkonen + * Removed duplicate Mod1+T binding + +2007-04-22 09:13 UTC Tuomo Valkonen + * Updates to PWM config file + +2007-04-22 00:33 UTC Tuomo Valkonen + * Removed ru translation, as it has not been updated as requested. + +2007-04-22 00:32 UTC Tuomo Valkonen + * Remove de translation, as it has not been updated as requested. + +2007-04-22 00:32 UTC Tuomo Valkonen + * 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 + * 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 + * 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 + * Added is_transient field to WClientWin.get_ident and for winprop matching. + +2007-04-20 16:30 UTC Tuomo Valkonen + * Removed unused transient_for field from WClientWin + +2007-04-20 16:09 UTC Tuomo Valkonen + * Added look_greenlight + +2007-04-20 16:07 UTC Tuomo Valkonen + * Hmm... + +2007-04-09 09:42 UTC Tuomo Valkonen + * Added commented-out bindings for plain-old-menus in cfg_ion.lua + +2007-04-08 12:37 UTC Tuomo Valkonen + * Ref. to size policy section etc. + +2007-04-08 12:18 UTC Tuomo Valkonen + * Use strings instead of numeric size policies + +2007-04-06 11:29 UTC Tuomo Valkonen + * Docs from $(LUA_SOURCES) too.. + +2007-04-06 11:18 UTC Tuomo Valkonen + * Added exports.tex make rule + +2007-04-06 11:00 UTC Tuomo Valkonen + * Added padding to default look's transient style + +2007-04-05 16:30 UTC Tuomo Valkonen + * Fixed documentation mixup + +2007-04-05 16:27 UTC Tuomo Valkonen + * Statusbar documetnation improvements + +2007-04-03 15:41 UTC Tuomo Valkonen + * Updated Finnish translation + +2007-04-03 15:23 UTC Tuomo Valkonen + * Tiling navigation code changes and semi-fixes + +2007-03-31 21:04 UTC Miroslav Kure + * Updated Czech translation + +2007-03-31 14:20 UTC Tuomo Valkonen + * 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 + * Unsqueeze includes base size hint + +2007-03-29 21:35 UTC Tuomo Valkonen + * Put the scratchpad in the group *scratchws* + +2007-03-29 21:34 UTC Tuomo Valkonen + * 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 + * Detach stacks one level above source now + +2007-03-29 17:12 UTC Tuomo Valkonen + * Don't override "level" by "bottom" in WGroup.attach + +2007-03-29 16:00 UTC Tuomo Valkonen + * 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 + * 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 + * 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 + * Export name fix + +2007-03-19 19:02 UTC Tuomo Valkonen + * Removed redundant MPLEX_ATTACH_MODAL parameter + +2007-03-19 18:57 UTC Tuomo Valkonen + * 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 + * Oops, return in wrong place in fs rq check was breaking other cfgrqs + +2007-03-19 18:19 UTC Tuomo Valkonen + * Unsqueeze infinite loop fix + 2007-03-18 20:31 UTC Tuomo Valkonen tagged ion-3ds-20070318 diff --git a/LICENSE b/LICENSE index cf9b6b9..b5cf6d2 100644 --- a/LICENSE +++ b/LICENSE @@ -1,9 +1,70 @@ +Copyright (c) Tuomo Valkonen 1999-2007. + +The code of this project is "essentially" licensed under the LGPL, version +2.1, unless otherwise indicated in components taken from elsewhere. It is +reproduced below. Additionally, the following terms apply to the use of +the names Ion, Ion3, and other derived names: + + Derived works and altered versions that significantly differ from the + original copyright holder's versions, must either a) be given names + that can not be associated with the "Ion" project, or b) be qualified + as "Ion soup", and still be considerable as customised versions of this + software. In both cases, executables must also be given names that do + not conflict with the original copyright holder's version, and the + copyright holder may not be referred to for support. + + Modules and other (standalone) extensions to Ion must also be named + so that they can not be confused to be supported by the copyright + holder. If "Ion" occurs in the name, it must be in the form + "Foo for Ion" instead of "Ion Foo", etc. + + If the name of the project (Ion), resp. names of particular branches + (Ion1, Ion2, Ion3, etc.), are used without further prominent version + qualifiers and notices of possible out-datedness to distribute this + software, then the following conditions must hold: a) The version + distributed online may not significantly differ from the copyright + holder's latest release marked stable, resp. latest release on a + branch, within a reasonable delay (normally 28 days) from the release. + b) The holders of physical distribution media are provided ways to + upgrade to the latest release within this same delay. + + This name policy notice may not be altered, and must be included in + any altered versions and binary redistributions. It may only be + removed when using small portions of the code in unrelated projects. + + The copyright holder and the Ion project retain the same rights to + your modifications that it would have under the LGPL or GPL without + these or similar additional terms. + +Explanations: + +Significant change: Bug fixes are a priori insignificant as additions. +Basic changes that are needed to install or run the software on a target +platform are a priori insignificant. Additionally, basic configuration +changes to better integrate the software with the target platform, +without obstructing the standard behaviour, are a priori insignificant. +The copyright holder, however, reserves the right to refine the +definition of significant changes on a per-case basis. Please consult +when in doubt. + +Distributions: For example, suppose an aggregate distribution of software +provides a `installpkg` command for installing packages. Then the action +`installpkg ion3` (resp. `installpkg ion`) should always install the +latest release of Ion3 (resp. the latest stable release), online +connectivity provided. The action `installpkg ion-3ds-20070318` may +at any date install this particular mentioned release. Likewise +`installpkg ion-soup` may install any non-conflicting customised +version. + +--- + + GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -57,7 +118,7 @@ modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. -^L + Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a @@ -113,7 +174,7 @@ modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. -^L + GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @@ -218,7 +279,7 @@ instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. -^L + Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. @@ -269,7 +330,7 @@ Library will still fall under Section 6.) distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. -^L + 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work @@ -331,7 +392,7 @@ restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. -^L + 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined @@ -372,7 +433,7 @@ subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. -^L + 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or @@ -425,7 +486,7 @@ conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. -^L + 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is @@ -459,7 +520,7 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS -^L + How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest @@ -490,7 +551,7 @@ notice is found. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/README b/README index 29fcb90..226bbe4 100644 --- a/README +++ b/README @@ -17,17 +17,8 @@ Building and installing * GNU make * Lua 5.1 (see ). -2. a) Edit `system.mk` to suit your system. Most GNU/Linux users should - need very few changes. - - b) Alternatively, go to the directory `build/ac`, run `autoreconf` - and then `./configure`. Switch back to the top lvel directory - afterwards. See `build/ac/README.autoconf` for details on parameters, - especially if you are using the Debian Lua packages. If you try - this method and it fails for some reason, please make sure - `build/ac/system-ac.mk` does not exist before falling back to - alternative a). Also in such a case, find someone else to complain - to: I (tuomov) will have nothing to do with autoconf. +2. Edit `system.mk` to suit your system. Most GNU/Linux users should + need very few changes. 3. If you want to build some extra modules now or do not want to build some of the standard modules, edit `modulelist.mk`. @@ -118,8 +109,6 @@ Credits Ion was written by Tuomo Valkonen. -The autoconf script written by Tom Payne for the most part. - The dock module was written by Tom Payne and Per Olofsson. `utils/ion-completefile/ion-completefile.c` is based on editline, (c) diff --git a/RELNOTES b/RELNOTES index c8621c1..4a3998e 100644 --- a/RELNOTES +++ b/RELNOTES @@ -1,4 +1,37 @@ +ion-3rc-20070506 +---------------- + +This is the first "rc" or "(stable) release candidate" release of +Ion3. This means that there will not be any further major changes +to it. Bugs will be fixed, and as an exception to the general +feature freeze, some hooks may still be added, if deemed useful. +Translations may also be included. After no new bugs (that can not +be deemed features) have been found in this or following "rc" +releases, the stable Ion3 will be released. + +Most of the changes in this release to the previous one already +are bug fixes, in addition to some general clean-up. Other notable +changes are: + + * Winprop matching improvements: it is possible to match against + `is_dockapp` and `is_transient` (booleans), and there's a hack + to support `class` and `instance` for dockapps too. + + * The default configuration puts dockapps in the statusbar's + tray area. + + * The autoconf kludge has been removed, as I will have nothing + to do with it, and nobody else seems to support or maintain + it either. + + * Tab numbers are displayed when releasing modifiers in the + `Mod1+K` submap. + +Distributors should pay heed to the name policy notice in the +LICENSE file. + + ion-3ds-20070318 ---------------- diff --git a/TODO.riot b/TODO.riot index ffb8781..162a268 100644 --- a/TODO.riot +++ b/TODO.riot @@ -56,25 +56,6 @@ In-Reply-To: Better support for the few applicable EWMH hints -From background-static Thu Mar 23 17:52:17 EET 2006 -Message-Id: -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: - -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: Date: Thu Mar 23 18:00:25 EET 2006 @@ -556,6 +537,25 @@ Subject: Done Done +From background-static Thu Mar 23 17:52:17 EET 2006 +Message-Id: +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: + +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: Date: Thu Mar 23 17:40:03 EET 2006 diff --git a/build/ac/README.autoconf b/build/ac/README.autoconf deleted file mode 100644 index 9af494e..0000000 --- a/build/ac/README.autoconf +++ /dev/null @@ -1,45 +0,0 @@ - -Ion autoconf script README - - -CONFIGURE SCRIPT OPTIONS - -The Ion-specific options to ./configure are: - - --disable-xinerama - --disable-xfree86-textprop-bug-workaround - --enable-Xutf8 - --disable-shared - --with-lua* (see DEBIAN NOTES below) - --enable-c99-source - --enable-xopen-source - --disable-locale - --enable-sun-f1x-remap - -Run ./configure --help for more information on these options. The -defaults are chosen to generate a configuration very similar to the -Ion default. - - -DEBIAN NOTES - -If you are using the Lua 5.1 package on Debian then use - - ./configure --with-lua-suffix=5.1 \ - --with-lua-includes=/usr/include/lua5.1 - -This will allow the script to find the Lua headers, binaries and -libraries as renamed and located on Debian. - - -CYGWIN NOTES - -Under Cygwin you must use statically linked modules: - - ./configure --disabled-shared - - -AUTHORS - -Tom Payne - diff --git a/build/ac/aclocal.m4 b/build/ac/aclocal.m4 deleted file mode 100644 index c80e0ac..0000000 --- a/build/ac/aclocal.m4 +++ /dev/null @@ -1,57 +0,0 @@ - -dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) -dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page -dnl also defines GSTUFF_PKG_ERRORS on error -AC_DEFUN(PKG_CHECK_MODULES, [ - succeeded=no - - if test -z "$PKG_CONFIG"; then - AC_PATH_PROG(PKG_CONFIG, pkg-config, no) - fi - - if test "$PKG_CONFIG" = "no" ; then - echo "*** The pkg-config script could not be found. Make sure it is" - echo "*** in your path, or set the PKG_CONFIG environment variable" - echo "*** to the full path to pkg-config." - echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." - else - PKG_CONFIG_MIN_VERSION=0.9.0 - if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then - AC_MSG_CHECKING(for $2) - - if $PKG_CONFIG --exists "$2" ; then - AC_MSG_RESULT(yes) - succeeded=yes - - AC_MSG_CHECKING($1_CFLAGS) - $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` - AC_MSG_RESULT($$1_CFLAGS) - - AC_MSG_CHECKING($1_LIBS) - $1_LIBS=`$PKG_CONFIG --libs "$2"` - AC_MSG_RESULT($$1_LIBS) - else - $1_CFLAGS="" - $1_LIBS="" - ## If we have a custom action on failure, don't print errors, but - ## do set a variable so people can do so. - $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` - ifelse([$4], ,echo $$1_PKG_ERRORS,) - fi - - AC_SUBST($1_CFLAGS) - AC_SUBST($1_LIBS) - else - echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." - echo "*** See http://www.freedesktop.org/software/pkgconfig" - fi - fi - - if test $succeeded = yes; then - ifelse([$3], , :, [$3]) - else - ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) - fi -]) - - diff --git a/build/ac/configure.ac b/build/ac/configure.ac deleted file mode 100644 index 88a8d4d..0000000 --- a/build/ac/configure.ac +++ /dev/null @@ -1,440 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -dnl Please report bugs in this autoconf script Tom Payne -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 - -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 -#include -#include -#include - -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 -#include - -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 -#include - -void f(void *last, ...) -{ - va_list ap, aq; - va_start(ap, last); - va_copy(aq, ap); - va_end(ap); - va_end(aq); -} - -int main() -{ - f(NULL); - exit(EXIT_SUCCESS); -} - -]])], - [AC_MSG_RESULT([no])], - [AC_MSG_RESULT([yes, clearing XOPEN_SOURCE]) - XOPEN_SOURCE=""]) - CFLAGS="$save_CFLAGS" -fi -dnl }}} - -dnl }}} - -dnl _DCF_NO_LOCALE {{{ - -AC_SUBST([_DCF_NO_LOCALE]) - -AC_ARG_ENABLE([locale], - [AS_HELP_STRING([--disable-locale], - [Disable locale support])]) - -if test "x$enable_locale" == xno; then - _DCF_NO_LOCALE="-DCF_NO_LOCALE" -fi - -dnl }}} - - -AC_OUTPUT([system-ac.mk]) - -if test "x$lua_version" = "x5.0"; then - AC_MSG_NOTICE([**]) - AC_MSG_NOTICE([** lua version 5.0 is buggy, consider upgrading to 5.0.1]) - AC_MSG_NOTICE([** see http://lua-users.org/lists/lua-l/2003-10/msg00039.html]) - AC_MSG_NOTICE([**]) -fi - -dnl vim: foldmethod=marker tabstop=4 shiftwidth=4 diff --git a/build/ac/system-ac.mk.in b/build/ac/system-ac.mk.in deleted file mode 100644 index 035a515..0000000 --- a/build/ac/system-ac.mk.in +++ /dev/null @@ -1,190 +0,0 @@ -## -## System settings -## - - -## -## Installation paths -## - -prefix=@prefix@ -exec_prefix=@exec_prefix@ - -# Unless you are creating a package conforming to some OS's standards, you -# probably do not want to modify the following directories: - -# Main binaries -BINDIR=@bindir@ -# Configuration .lua files -ETCDIR=@sysconfdir@/@PACKAGE_TARNAME@ -# Some .lua files and ion-* shell scripts -SHAREDIR=@datadir@/@PACKAGE_TARNAME@ -# Manual pages -MANDIR=@datadir@/man -# Some documents -DOCDIR=@datadir@/doc/@PACKAGE_TARNAME@ -# Nothing at the moment -INCDIR=@includedir@ -# Nothing at the moment -LIBDIR=@libdir@ -# Modules -MODULEDIR=@libdir@/@PACKAGE_TARNAME@/mod -# Compiled Lua source code -LCDIR=@libdir@/@PACKAGE_TARNAME@/lc -# ion-completefile (does not belong in SHAREDIR being a binary file) -EXTRABINDIR=@libexecdir@/@PACKAGE_TARNAME@/bin -# For ion-completeman system-wide cache -#VARDIR=@localstatedir@/cache/@PACKAGE_TARNAME@ -VARDIR=/var/cache/@PACKAGE_TARNAME@ -# Message catalogs -LOCALEDIR=@prefix@/share/locale - - -## -## Modules -## - -# Set PRELOAD_MODULES=1 if your system does not support dynamically loaded -# modules through 'libdl' or has non-standard naming conventions. -PRELOAD_MODULES=@PRELOAD_MODULES@ - -# Flags to link with libdl. -DL_LIBS=@DL_LIBS@ - - -## -## Lua -## - -# If you have installed Lua 5.0 from the official tarball without changing -# paths, this should do it. -#LUA_DIR=/usr/local -LUA_LIBS = @LUA_LIBS@ -LUA_INCLUDES = @LUA_INCLUDES@ -LUA=@LUA@ -LUAC=@LUAC@ - -# If you are using the Debian packages, the following settings should be -# what you want. -#LUA_LIBS=`lua-config50 --libs` -#LUA_INCLUDES=`lua-config50 --include` -#LUA=lua50 -#LUAC=luac50 - - -## -## X libraries, includes and options -## - -#X11_PREFIX=/usr/X11R6 -# SunOS/Solaris -#X11_PREFIX=/usr/openwin - -X11_LIBS=@X_EXTRA_LIBS@ @X_PRE_LIBS@ -lX11 @X_LIBS@ -X11_INCLUDES=@X_CFLAGS@ - -# Change commenting to disable Xinerama support -XINERAMA_LIBS=@XINERAMA_LIBS@ -DEFINES += @_DCF_NO_XINERAMA@ - -# XFree86 libraries up to 4.3.0 have a bug that will cause Ion to segfault -# if Opera is used when i18n support is enabled. The following setting -# should work around that situation. -DEFINES += @_DCF_XFREE86_TEXTPROP_BUG_WORKAROUND@ - -# Use the Xutf8 routines (XFree86 extension) instead of Xmb routines in -# an UTF8 locale. -DEFINES += @_DCF_DE_USE_XUTF8@ - -# Remap F11 key to SunF36 and F12 to SunF37? You may want to set this -# on SunOS. -DEFINES += @_DCF_SUN_F1X_REMAP@ - - -## -## libc -## - -# You may uncomment this if you know your system has -# asprintf and vasprintf in the c library. (gnu libc has.) -# If HAS_SYSTEM_ASPRINTF is not defined, an implementation -# in sprintf_2.2/ is used. -HAS_SYSTEM_ASPRINTF=@HAS_SYSTEM_ASPRINTF@ - - -# If you're on an archaic system (such as relatively recent *BSD releases) -# without even dummy multibyte/widechar and localisation support, you may -# have to uncomment the following line: -DEFINES += @_DCF_NO_LOCALE@ - - -## -## C compiler -## - -CC=@CC@ - -# Same as '-Wall -pedantic' without '-Wunused' as callbacks often -# have unused variables. -WARN= -W -Wimplicit -Wreturn-type -Wswitch -Wcomment \ - -Wtrigraphs -Wformat -Wchar-subscripts \ - -Wparentheses -pedantic -Wuninitialized - -CFLAGS=@CFLAGS@ $(WARN) $(DEFINES) $(EXTRA_INCLUDES) $(INCLUDES) -LDFLAGS=@LDFLAGS@ $(EXTRA_LIBS) $(LIBS) -EXPORT_DYNAMIC=-Xlinker --export-dynamic - -# The following options are mainly for development use and can be used -# to check that the code seems to conform to some standards. Depending -# on the version and vendor of you libc, the options may or may not have -# expected results. If you define one of C99_SOURCE or XOPEN_SOURCE, you -# may also have to define the other. - -#C89_SOURCE=-ansi - -#POSIX_SOURCE=@_D_POSIX_SOURCE@ - -# Most systems -#XOPEN_SOURCE=-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED -# SunOS, (Irix) -#XOPEN_SOURCE=-D__EXTENSIONS__ - -#C99_SOURCE=-std=c99 -DCF_HAS_VA_COPY - -# The -DCF_HAS_VA_COPY option should allow for some optimisations, and -# in some cases simply defining -C99_SOURCE=@_DCF_HAS_VA_COPY@ -# might allow for those optimisations to be taken without any special -# libc or compiler options. - - -## -## make depend -## - -DEPEND_FILE=.depend -DO_MAKE_DEPEND=$(CC) -MM $(DEFINES) $(EXTRA_INCLUDES) $(INCLUDES) -MAKE_DEPEND=$(DO_MAKE_DEPEND) $(SOURCES) > $(DEPEND_FILE) - -## -## AR -## - -AR=@AR@ -ARFLAGS=cr -RANLIB=@RANLIB@ - - -## -## Install & strip -## - -INSTALL=@INSTALL@ -INSTALLDIR=mkdir -p - -BIN_MODE=755 -DATA_MODE=644 - -STRIP=@STRIP@ - -RM=rm diff --git a/build/mkman.lua b/build/mkman.lua index bd867c6..95f0bd9 100644 --- a/build/mkman.lua +++ b/build/mkman.lua @@ -68,10 +68,24 @@ end local function dobindings(fn, bindings) local p={} + local dummy = function() end p.META="Mod1+" p.ALTMETA="" + p.dopath=dummy + p.defmenu=dummy + p.defctxmenu=dummy + p.menuentry=dummy + p.submenu=dummy + p.submap_enter=dummy + p.submap_leave=dummy + p.submap_wait=dummy + + p.ioncore={ + set=dummy, + } + function p.bdoc(text) return {action = "doc", text = text} end @@ -124,26 +138,43 @@ local function dobindings(fn, bindings) return mact("mdrag", buttonspec, cmd, guard) end - function p.defbindings(context, bnd) - if not bindings[context] then - bindings[context]=bnd + function ins(t, v) + if not t.seen then + t.seen={} + end + + if (not v.kcb) or v.submap then + -- Submap rebinds are not presently handled + table.insert(t, v) else - for _, v in ipairs(bnd) do - table.insert(bindings[context], v) + local id=v.action..":"..v.kcb..":"..(v.area or "") + local i=t.seen[id] + if i then + t[i].invalid=true + end + if v.cmd then + table.insert(t, v) + t.seen[id]=#t + else + -- Unbind only + t.seen[id]=nil end end end - - local function dummy() - end - p.defmenu=dummy - p.defctxmenu=dummy - p.menuentry=dummy - p.submenu=dummy + function p.defbindings(context, bnd) + if not bindings[context] then + bindings[context]={} + else + -- Reset documentation + table.insert(bindings[context], { action = "doc", text = nil }) + end + + for _, v in ipairs(bnd) do + ins(bindings[context], v) + end + end - p.ioncore={ set=dummy } - local env=setmetatable({}, { __index=p, __newindex=function(x) @@ -175,22 +206,30 @@ local function docgroup_bindings(bindings) local function parsetable(t, prefix) for _, v in ipairs(t) do - if v.kcb then - v.kcb=string.gsub(v.kcb, "AnyModifier%+", "") - end - if v.action=="doc" then - outi=outi+1 - out[outi]={doc=v.text, bindings={}} - elseif v.submap then - parsetable(v.submap, prefix..v.kcb.." ") - else - assert(out[outi]) - v.kcb=prefix..v.kcb - table.insert(out[outi].bindings, v) + if not v.invalid then + if v.kcb then + v.kcb=string.gsub(v.kcb, "AnyModifier%+", "") + end + if v.action=="doc" then + if outi==0 or #out[outi].bindings>0 then + outi=outi+1 + end + out[outi]={doc=v.text, bindings={}} + elseif v.submap then + parsetable(v.submap, prefix..v.kcb.." ") + else + assert(out[outi]) + v.kcb=prefix..v.kcb + table.insert(out[outi].bindings, v) + end end end end + if outi~=0 and #out[outi].bindings==0 then + out[outi]=nil + end + parsetable(bindings, "") return out @@ -227,7 +266,7 @@ end local function write_bindings_man(db) local function write_binding_man(v) - return '.TP\n.B '..combine_bindings(v)..'\n'..gettext(v.doc)..'\n' + return '.TP\n.B '..combine_bindings(v)..'\n'..gettext(v.doc or "?")..'\n' end local s="" diff --git a/build/rules.mk b/build/rules.mk index 3f8a42d..b61e2f6 100644 --- a/build/rules.mk +++ b/build/rules.mk @@ -40,11 +40,11 @@ depend: subdirs-depend _depend install: subdirs-install _install +ifdef MAKE_EXPORTS + # Exports ###################################### -ifdef MAKE_EXPORTS - EXPORTS_C = exports.c EXPORTS_H = exports.h @@ -56,14 +56,28 @@ _exports: $(EXPORTS_C) $(EXPORTS_H): $(EXPORTS_C) -$(EXPORTS_C): $(SOURCES) +$(EXPORTS_C): $(SOURCES) $(MKEXPORTS_EXTRA_DEPS) $(MKEXPORTS) -module $(MAKE_EXPORTS) -o $(EXPORTS_C) -h $(EXPORTS_H) \ $(SOURCES) $(MKEXPORTS_EXTRAS) +# Exports documentation +###################################### + +EXPORTS_DOC = exports.tex + +TO_CLEAN := $(TO_CLEAN) $(EXPORTS_DOC) + +_exports_doc: $(EXPORTS_DOC) + +$(EXPORTS_DOC): $(SOURCES) $(LUA_SOURCES) $(MKEXPORTS_EXTRA_DEPS) + $(MKEXPORTS) -mkdoc -module $(MAKE_EXPORTS) -o $(EXPORTS_DOC) \ + $(SOURCES) $(LUA_SOURCES) $(MKEXPORTS_EXTRAS) + else # !MAKE_EXPORTS EXPORTS_C = EXPORTS_H = +EXPORTS_DOC = endif # !MAKE_EXPORTS diff --git a/config.h b/config.h index f9d7131..03e80ee 100644 --- a/config.h +++ b/config.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * FOOBARBAZQUK */ #ifndef ION_CONFIG_H @@ -21,7 +18,6 @@ #define CF_MAX_MOVERES_STR_SIZE 32 -#define CF_TAB_TEXT_ALIGN ALIGN_CENTER #define CF_RESIZE_DELAY 1500 #define CF_XMESSAGE "xmessage -file " diff --git a/de/brush.c b/de/brush.c index 3101324..74b47f1 100644 --- a/de/brush.c +++ b/de/brush.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -29,6 +26,13 @@ /*{{{ Brush creation and releasing */ +#define MATCHES(S, A) (gr_stylespec_score(&(S), A)>0) +#define MATCHES2(S, A1, A2) (gr_stylespec_score2(&(S), A1, A2)>0) + +#define ENSURE_INITSPEC(S, NM) \ + if((S).attrs==NULL) gr_stylespec_load(&(S), NM); + + static GrStyleSpec tabframe_spec=GR_STYLESPEC_INIT; static GrStyleSpec tabinfo_spec=GR_STYLESPEC_INIT; static GrStyleSpec tabmenuentry_spec=GR_STYLESPEC_INIT; @@ -185,6 +189,7 @@ void debrush_get_border_widths(DEBrush *brush, GrBorderWidths *bdw) uint tmp=0; uint tbf=1, lrf=1; uint pad=bd->pad; + uint spc=style->spacing; switch(bd->sides){ case DEBORDER_TB: @@ -195,16 +200,22 @@ void debrush_get_border_widths(DEBrush *brush, GrBorderWidths *bdw) break; } + /* Ridge/groove styles use 'padding' for the spacing between the + * 'highlight' and 'shadow' portions of the border, and 'spacing' + * between the border and contents. Inlaid style also uses 'spacing' + * between the contents and the border, and padding as its outer + * component. Elevated style does not use spacing. + */ switch(bd->style){ case DEBORDER_RIDGE: case DEBORDER_GROOVE: - tmp=bd->sh+bd->hl; - bdw->top=tbf*tmp+pad; bdw->bottom=tbf*tmp+pad; - bdw->left=lrf*tmp+pad; bdw->right=lrf*tmp+pad; + tmp=bd->sh+bd->hl+pad; + bdw->top=tbf*tmp+spc; bdw->bottom=tbf*tmp+spc; + bdw->left=lrf*tmp+spc; bdw->right=lrf*tmp+spc; break; case DEBORDER_INLAID: - tmp=bd->sh; bdw->top=tbf*tmp+pad; bdw->left=lrf*tmp+pad; - tmp=bd->hl; bdw->bottom=tbf*tmp+pad; bdw->right=lrf*tmp+pad; + tmp=bd->sh+pad; bdw->top=tbf*tmp+spc; bdw->left=lrf*tmp+spc; + tmp=bd->hl+pad; bdw->bottom=tbf*tmp+spc; bdw->right=lrf*tmp+spc; break; case DEBORDER_ELEVATED: default: @@ -225,7 +236,7 @@ bool debrush_get_extra(DEBrush *brush, const char *key, char type, void *data) { DEStyle *style=brush->d; while(style!=NULL){ - if(extl_table_get(style->data_table, 's', type, key, data)) + if(extl_table_get(style->extras_table, 's', type, key, data)) return TRUE; style=style->based_on; } diff --git a/de/brush.h b/de/brush.h index d9a040a..3828a43 100644 --- a/de/brush.h +++ b/de/brush.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_DE_BRUSH_H @@ -27,11 +24,11 @@ INTRCLASS(DEBrush); typedef void DEBrushExtrasFn(DEBrush *brush, const WRectangle *g, DEColourGroup *cg, - GrBorderWidths *bdw, - GrFontExtents *fnte, + const GrBorderWidths *bdw, + const GrFontExtents *fnte, const GrStyleSpec *a1, const GrStyleSpec *a2, - bool pre); + bool pre, int index); DECLCLASS(DEBrush){ GrBrush grbrush; diff --git a/de/colour.c b/de/colour.c index 5693d81..d3be1ef 100644 --- a/de/colour.c +++ b/de/colour.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/de/colour.h b/de/colour.h index 06d8654..0f99863 100644 --- a/de/colour.h +++ b/de/colour.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_DE_COLOUR_H diff --git a/de/draw.c b/de/draw.c index 40a2f8f..c48d49a 100644 --- a/de/draw.c +++ b/de/draw.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -15,6 +12,7 @@ #include #include #include +#include #include "brush.h" #include "font.h" #include "private.h" @@ -296,17 +294,43 @@ static void copy_masked(DEBrush *brush, Drawable src, Drawable dst, } -static GrStyleSpec dragged_spec=GR_STYLESPEC_INIT; -static GrStyleSpec tagged_spec=GR_STYLESPEC_INIT; -static GrStyleSpec submenu_spec=GR_STYLESPEC_INIT; + +#define ISSET(S, A) ((S)!=NULL && gr_stylespec_isset(S, A)) + + +GR_DEFATTR(dragged); +GR_DEFATTR(tagged); +GR_DEFATTR(submenu); +GR_DEFATTR(numbered); +GR_DEFATTR(tabnumber); + + +static void ensure_attrs() +{ + GR_ALLOCATTR_BEGIN; + GR_ALLOCATTR(dragged); + GR_ALLOCATTR(tagged); + GR_ALLOCATTR(submenu); + GR_ALLOCATTR(numbered); + GR_ALLOCATTR(tabnumber); + GR_ALLOCATTR_END; +} + + +static int get_ty(const WRectangle *g, const GrBorderWidths *bdw, + const GrFontExtents *fnte) +{ + return (g->y+bdw->top+fnte->baseline + +(g->h-bdw->top-bdw->bottom-fnte->max_height)/2); +} void debrush_tab_extras(DEBrush *brush, const WRectangle *g, - DEColourGroup *cg, GrBorderWidths *bdw, - GrFontExtents *fnte, + DEColourGroup *cg, const GrBorderWidths *bdw, + const GrFontExtents *fnte, const GrStyleSpec *a1, const GrStyleSpec *a2, - bool pre) + bool pre, int index) { DEStyle *d=brush->d; GC tmp; @@ -315,22 +339,55 @@ void debrush_tab_extras(DEBrush *brush, const WRectangle *g, */ static bool swapped=FALSE; - ENSURE_INITSPEC(dragged_spec, "dragged"); - ENSURE_INITSPEC(tagged_spec, "tagged"); + ensure_attrs(); if(pre){ - if(!MATCHES2(dragged_spec, a1, a2)) - return; - - tmp=d->normal_gc; - d->normal_gc=d->stipple_gc; - d->stipple_gc=tmp; - swapped=TRUE; - XClearArea(ioncore_g.dpy, brush->win, g->x, g->y, g->w, g->h, False); + if(ISSET(a2, GR_ATTR(dragged)) || ISSET(a1, GR_ATTR(dragged))){ + tmp=d->normal_gc; + d->normal_gc=d->stipple_gc; + d->stipple_gc=tmp; + swapped=TRUE; + XClearArea(ioncore_g.dpy, brush->win, g->x, g->y, g->w, g->h, False); + } return; } - if(MATCHES2(tagged_spec, a1, a2)){ + + if((ISSET(a1, GR_ATTR(numbered)) || ISSET(a2, GR_ATTR(numbered))) + && index>=0){ + + DEColourGroup *cg; + GrStyleSpec tmp; + + gr_stylespec_init(&tmp); + gr_stylespec_append(&tmp, a2); + gr_stylespec_set(&tmp, GR_ATTR(tabnumber)); + + cg=debrush_get_colour_group2(brush, a1, &tmp); + + gr_stylespec_unalloc(&tmp); + + if(cg!=NULL){ + char *s=NULL; + + libtu_asprintf(&s, "[%d]", index+1); + + if(s!=NULL){ + int l=strlen(s); + uint w=debrush_get_text_width(brush, s, l); + if(w < g->w-bdw->right-bdw->left){ + int ty=get_ty(g, bdw, fnte); + int tx=(d->textalign==DEALIGN_RIGHT + ? g->x+bdw->left + : g->x+g->w-bdw->right-w); + debrush_do_draw_string(brush, tx, ty, s, l, TRUE, cg); + } + free(s); + } + } + } + + if(ISSET(a2, GR_ATTR(tagged)) || ISSET(a1, GR_ATTR(tagged))){ XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg); copy_masked(brush, d->tag_pixmap, brush->win, 0, 0, @@ -338,7 +395,7 @@ void debrush_tab_extras(DEBrush *brush, const WRectangle *g, g->x+g->w-bdw->right-d->tag_pixmap_w, g->y+bdw->top); } - + if(swapped){ tmp=d->normal_gc; d->normal_gc=d->stipple_gc; @@ -355,28 +412,26 @@ void debrush_tab_extras(DEBrush *brush, const WRectangle *g, void debrush_menuentry_extras(DEBrush *brush, const WRectangle *g, DEColourGroup *cg, - GrBorderWidths *bdw, - GrFontExtents *fnte, + const GrBorderWidths *bdw, + const GrFontExtents *fnte, const GrStyleSpec *a1, const GrStyleSpec *a2, - bool pre) + bool pre, int index) { int tx, ty; if(pre) return; - ENSURE_INITSPEC(submenu_spec, "submenu"); + ensure_attrs(); - if(!MATCHES2(submenu_spec, a1, a2)) - return; - - ty=(g->y+bdw->top+fnte->baseline - +(g->h-bdw->top-bdw->bottom-fnte->max_height)/2); - tx=g->x+g->w-bdw->right; + if(ISSET(a2, GR_ATTR(submenu)) || ISSET(a1, GR_ATTR(submenu))){ + ty=get_ty(g, bdw, fnte); + tx=g->x+g->w-bdw->right; - debrush_do_draw_string(brush, tx, ty, DE_SUB_IND, DE_SUB_IND_LEN, - FALSE, cg); + debrush_do_draw_string(brush, tx, ty, DE_SUB_IND, DE_SUB_IND_LEN, + FALSE, cg); + } } @@ -401,7 +456,8 @@ static void debrush_do_draw_textbox(DEBrush *brush, DEColourGroup *cg, bool needfill, const GrStyleSpec *a1, - const GrStyleSpec *a2) + const GrStyleSpec *a2, + int index) { uint len; GrBorderWidths bdw; @@ -412,7 +468,7 @@ static void debrush_do_draw_textbox(DEBrush *brush, grbrush_get_font_extents(&(brush->grbrush), &fnte); if(brush->extras_fn!=NULL) - brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, TRUE); + brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, TRUE, index); debrush_do_draw_box(brush, geom, cg, needfill); @@ -436,14 +492,13 @@ static void debrush_do_draw_textbox(DEBrush *brush, tx=geom->x+bdw.left; } - ty=(geom->y+bdw.top+fnte.baseline - +(geom->h-bdw.top-bdw.bottom-fnte.max_height)/2); + ty=get_ty(geom, &bdw, &fnte); debrush_do_draw_string(brush, tx, ty, text, len, FALSE, cg); }while(0); if(brush->extras_fn!=NULL) - brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, FALSE); + brush->extras_fn(brush, geom, cg, &bdw, &fnte, a1, a2, FALSE, index); } @@ -455,7 +510,7 @@ void debrush_draw_textbox(DEBrush *brush, const WRectangle *geom, if(cg!=NULL){ debrush_do_draw_textbox(brush, geom, text, cg, needfill, - attr, NULL); + attr, NULL, -1); } } @@ -480,7 +535,7 @@ void debrush_draw_textboxes(DEBrush *brush, const WRectangle *geom, if(cg!=NULL){ debrush_do_draw_textbox(brush, &g, elem[i].text, cg, needfill, - common_attrib, &elem[i].attr); + common_attrib, &elem[i].attr, i); } if(i==n-1) diff --git a/de/font.c b/de/font.c index 957cc61..5521125 100644 --- a/de/font.c +++ b/de/font.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/de/font.h b/de/font.h index 7e40121..4ce1923 100644 --- a/de/font.h +++ b/de/font.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_DE_FONT_H diff --git a/de/fontset.h b/de/fontset.h index 994c769..632f6e2 100644 --- a/de/fontset.h +++ b/de/fontset.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_DE_FONTSET_H diff --git a/de/init.c b/de/init.c index bc771d0..60c8715 100644 --- a/de/init.c +++ b/de/init.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -130,45 +127,58 @@ void de_get_border(DEBorder *border, ExtlTab tab) /*{{{ Colours */ -bool de_get_colour(WRootWin *rootwin, DEColour *ret, - ExtlTab tab, DEStyle *based_on, - const char *what, DEColour substitute) +static bool de_get_colour_(WRootWin *rootwin, DEColour *ret, + ExtlTab tab, const char *what, + DEColour substitute, DEColour inherit) { char *name=NULL; - bool ok=FALSE; + bool set=FALSE; if(extl_table_gets_s(tab, what, &name)){ - ok=de_alloc_colour(rootwin, ret, name); + if(strcmp(name, "inherit")==0){ + set=de_duplicate_colour(rootwin, inherit, ret); + }else{ + set=de_alloc_colour(rootwin, ret, name); - if(!ok) - warn(TR("Unable to allocate colour \"%s\"."), name); - + if(!set) + warn(TR("Unable to allocate colour \"%s\"."), name); + } free(name); - }else if(based_on!=NULL){ - return de_get_colour(rootwin, ret, based_on->data_table, - based_on->based_on, what, substitute); } - if(!ok) - ok=de_duplicate_colour(rootwin, substitute, ret); + if(!set) + de_duplicate_colour(rootwin, substitute, ret); - return ok; + return set; } +static bool de_get_colour(WRootWin *rootwin, DEColour *ret, + ExtlTab tab, const char *what, DEColour substitute) +{ + return de_get_colour_(rootwin, ret, tab, what, substitute, substitute); +} + + void de_get_colour_group(WRootWin *rootwin, DEColourGroup *cg, ExtlTab tab, DEStyle *based_on) { - de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour", - DE_WHITE(rootwin)); - de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour", - DE_WHITE(rootwin)); - de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour", - DE_BLACK(rootwin)); - de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour", - DE_WHITE(rootwin)); - de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour", - cg->bg); + bool bgset; + DEColour padinh; + + de_get_colour(rootwin, &(cg->hl), tab, "highlight_colour", + (based_on ? based_on->cgrp.hl : DE_WHITE(rootwin))); + de_get_colour(rootwin, &(cg->sh), tab, "shadow_colour", + (based_on ? based_on->cgrp.sh : DE_WHITE(rootwin))); + de_get_colour(rootwin, &(cg->fg), tab, "foreground_colour", + (based_on ? based_on->cgrp.fg : DE_WHITE(rootwin))); + bgset=de_get_colour(rootwin, &(cg->bg), tab, "background_colour", + (based_on ? based_on->cgrp.bg : DE_BLACK(rootwin))); + + padinh=(based_on ? based_on->cgrp.pad : DE_WHITE(rootwin)); + + de_get_colour_(rootwin, &(cg->pad), tab, "padding_colour", + (bgset ? cg->bg : padinh), padinh); } @@ -258,6 +268,63 @@ void de_get_transparent_background(uint *mode, ExtlTab tab) /*}}}*/ +/*{{{ Extras filter/copy */ + + +static const char * const known_values[]={ + "based_on", + "font", + "shadow_pixels", + "highlight_pixels", + "padding_pixels", + "border_style", + "border_sides", + "spacing", + "foreground_colour", + "background_colour", + "shadow_colour", + "highlight_colour", + "padding_colour", + "text_align", + NULL +}; + + +static bool filter_extras_iter_fn(ExtlAny k, ExtlAny v, void *p) +{ + ExtlTab *tgt=(ExtlTab*)p; + const char *s; + int i; + + if(k.type!='s' && k.type!='S') + return TRUE; + + for(i=0; known_values[i]; i++){ + if(strcmp(known_values[i], k.value.s)==0) + return TRUE; + } + + if(*tgt==extl_table_none()) + *tgt=extl_create_table(); + + extl_table_set(*tgt, 'a', 'a', k, v); + + return TRUE; +} + + +static void filter_extras(ExtlTab *tgt, ExtlTab src) +{ + /* Copy any unknown string-keyed values from src to tgt, + * possibly creating tgt. + */ + extl_table_iter(src, filter_extras_iter_fn, tgt); +} + + +/*}}}*/ + + /*{{{ de_defstyle */ @@ -265,8 +332,6 @@ void de_get_nonfont(WRootWin *rootwin, DEStyle *style, ExtlTab tab) { DEStyle *based_on=style->based_on; - style->data_table=extl_ref_table(tab); - if(based_on!=NULL){ style->border=based_on->border; style->transparency_mode=based_on->transparency_mode; @@ -295,40 +360,37 @@ void de_get_nonfont(WRootWin *rootwin, DEStyle *style, ExtlTab tab) EXTL_EXPORT bool de_defstyle_rootwin(WRootWin *rootwin, const char *name, ExtlTab tab) { - DEStyle *style; - char *fnt; + DEStyle *style, *based_on=NULL; + int based_on_score=-1; + char *fnt, *bss; uint n; - char *based_on_name; - DEStyle *based_on=NULL; - GrStyleSpec based_on_spec; if(name==NULL) return FALSE; style=de_create_style(rootwin, name); - + if(style==NULL) return FALSE; - - if(get_spec(tab, "based_on", &based_on_spec, &based_on_name)){ - based_on=de_get_style(rootwin, &based_on_spec); + + if(extl_table_gets_s(tab, "based_on", &bss)){ + GrStyleSpec bs; - gr_stylespec_unalloc(&based_on_spec); - - if(based_on==style){ - warn(TR("'based_on' for %s points back to the style itself."), - name); - }else if(based_on==NULL){ - warn(TR("Unknown base style. \"%s\""), based_on_name); - }else{ - style->based_on=based_on; - based_on->usecount++; - /* Copy simple parameters */ - } + gr_stylespec_load(&bs, bss); + + based_on=de_get_style(rootwin, &bs); - free(based_on_name); + gr_stylespec_unalloc(&bs); + free(bss); + }else{ + based_on=de_get_style(rootwin, &style->spec); } - + + if(based_on!=NULL){ + style->based_on=based_on; + based_on->usecount++; + } + de_get_nonfont(rootwin, style, tab); if(extl_table_gets_s(tab, "font", &fnt)){ @@ -341,6 +403,54 @@ bool de_defstyle_rootwin(WRootWin *rootwin, const char *name, ExtlTab tab) if(style->font==NULL) de_load_font_for_style(style, CF_FALLBACK_FONT_NAME); + if(based_on!=NULL && + gr_stylespec_equals(&based_on->spec, &style->spec)){ + + /* The new style replaces based_on, so it may be dumped. */ + if(!based_on->is_fallback) + destyle_dump(based_on); + + if(based_on->usecount==1){ + uint nb=based_on->n_extra_cgrps; + uint ns=style->n_extra_cgrps; + /* Nothing else is using based_on: optimise and move + * extra colour groups here, so that based_on can be freed. + */ + + if(nb>0){ + DEColourGroup *cgs=ALLOC_N(DEColourGroup, nb+ns); + + if(cgs!=NULL){ + memcpy(cgs, based_on->extra_cgrps, sizeof(DEColourGroup)*nb); + memcpy(cgs+nb, style->extra_cgrps, sizeof(DEColourGroup)*ns); + + free(style->extra_cgrps); + style->extra_cgrps=cgs; + style->n_extra_cgrps=nb+ns; + + free(based_on->extra_cgrps); + based_on->extra_cgrps=NULL; + based_on->n_extra_cgrps=0; + + } + } + + /* style->extras_table should be none still */ + style->extras_table=based_on->extras_table; + based_on->extras_table=extl_table_none(); + + style->based_on=based_on->based_on; + based_on->based_on=NULL; + + destyle_unref(based_on); + } + + } + + filter_extras(&style->extras_table, tab); + + destyle_add(style); + return TRUE; } diff --git a/de/init.h b/de/init.h index c751bb0..5a51ee6 100644 --- a/de/init.h +++ b/de/init.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_DE_INIT_H @@ -20,9 +17,6 @@ extern void de_get_border_val(uint *val, ExtlTab tab, const char *what); extern void de_get_border_style(uint *ret, ExtlTab tab); extern void de_get_border(DEBorder *border, ExtlTab tab); -extern bool de_get_colour(WRootWin *rootwin, DEColour *ret, - ExtlTab tab, DEStyle *based_on, - const char *what, DEColour substitute); extern void de_get_colour_group(WRootWin *rootwin, DEColourGroup *cg, ExtlTab tab, DEStyle *based_on); extern void de_get_extra_cgrps(WRootWin *rootwin, DEStyle *style, diff --git a/de/private.h b/de/private.h index dde51c4..cb3700a 100644 --- a/de/private.h +++ b/de/private.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_DE_PRIVATE_H @@ -15,10 +12,4 @@ #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 */ diff --git a/de/style.c b/de/style.c index b449337..2e61bf2 100644 --- a/de/style.c +++ b/de/style.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -176,7 +173,7 @@ void destyle_deinit(DEStyle *style) if(style->extra_cgrps!=NULL) free(style->extra_cgrps); - extl_unref_table(style->data_table); + extl_unref_table(style->extras_table); XFreeGC(ioncore_g.dpy, style->normal_gc); @@ -195,7 +192,7 @@ void destyle_deinit(DEStyle *style) } -static void dump_style(DEStyle *style) +void destyle_dump(DEStyle *style) { /* Allow the style still be used but get if off the list. */ UNLINK_ITEM(styles, style, next, prev); @@ -241,7 +238,7 @@ bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name) style->n_extra_cgrps=0; style->extra_cgrps=NULL; - style->data_table=extl_table_none(); + style->extras_table=extl_table_none(); create_normal_gc(style, rootwin); @@ -251,7 +248,7 @@ bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name) } -static DEStyle *do_create_style(WRootWin *rootwin, const char *name) +DEStyle *de_create_style(WRootWin *rootwin, const char *name) { DEStyle *style=ALLOC(DEStyle); if(style!=NULL){ @@ -264,33 +261,12 @@ static DEStyle *do_create_style(WRootWin *rootwin, const char *name) } -DEStyle *de_create_style(WRootWin *rootwin, const char *name) +void destyle_add(DEStyle *style) { - DEStyle *oldstyle, *style; - uint score; - - style=do_create_style(rootwin, name); - - if(style==NULL) - return NULL; - - for(oldstyle=styles; oldstyle!=NULL; oldstyle=oldstyle->next){ - if(oldstyle->rootwin!=rootwin) - continue; - if(gr_stylespec_equals(&oldstyle->spec, &style->spec)) - break; - } - - if(oldstyle!=NULL && !oldstyle->is_fallback) - dump_style(oldstyle); - LINK_ITEM_FIRST(styles, style, next, prev); - - return style; } - /*EXTL_DOC * Clear all styles from drawing engine memory. */ @@ -301,7 +277,7 @@ void de_reset() for(style=styles; style!=NULL; style=next){ next=style->next; if(!style->is_fallback) - dump_style(style); + destyle_dump(style); } } @@ -315,7 +291,7 @@ void de_deinit_styles() warn(TR("Style is still in use [%d] but the module " "is being unloaded!"), style->usecount); } - dump_style(style); + destyle_dump(style); } } diff --git a/de/style.h b/de/style.h index 172b509..11fbc5e 100644 --- a/de/style.h +++ b/de/style.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_DE_STYLE_H @@ -73,7 +70,7 @@ DECLSTRUCT(DEStyle){ int textalign; uint spacing; - ExtlTab data_table; + ExtlTab extras_table; /* Only initialised if used as a DETabBrush */ bool tabbrush_data_ok; @@ -100,5 +97,8 @@ extern void de_deinit_styles(); extern DEStyle *de_get_style(WRootWin *rootwin, const GrStyleSpec *spec); +extern void destyle_add(DEStyle *style); +extern void destyle_dump(DEStyle *style); + #endif /* ION_DE_STYLE_H */ diff --git a/doc/ChangeLog b/doc/ChangeLog index 00fe495..c73b316 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,75 @@ +2007-05-06 14:40 UTC Tuomo Valkonen + tagged ion-doc-3rc-20070506 + +2007-05-06 14:25 UTC Tuomo Valkonen + * mod_mgmtmode removal + +2007-05-06 13:09 UTC Tuomo Valkonen + * Removed obsolete example + +2007-05-04 21:46 UTC Tuomo Valkonen + * Fixes and updates to binding docs + +2007-05-04 16:13 UTC Tuomo Valkonen + * Documen the submap leave/enter stuff + +2007-04-26 22:44 UTC Tuomo Valkonen + * Improved string marking + +2007-04-26 22:28 UTC Tuomo Valkonen + * Drawing stuff doc improvements + +2007-04-22 18:14 UTC Tuomo Valkonen + * Document is_dockapp + +2007-04-22 12:29 UTC Tuomo Valkonen + * Winprop doc. improvements/fixes + +2007-04-22 00:16 UTC Tuomo Valkonen + * Minor fixes and improvements + +2007-04-20 16:36 UTC Tuomo Valkonen + * Document is_transient + +2007-04-15 12:33 UTC Tuomo Valkonen + * Updates to implementation notes + +2007-04-08 12:38 UTC Tuomo Valkonen + * Removed quotation abuse + +2007-04-08 12:37 UTC Tuomo Valkonen + * Size policy documentation + +2007-04-08 11:53 UTC Tuomo Valkonen + * Quote changes + +2007-04-08 11:49 UTC Tuomo Valkonen + * Fixed typos etc. + +2007-04-08 11:34 UTC Tuomo Valkonen + * Intro improvements + +2007-04-06 11:27 UTC Tuomo Valkonen + * Systray stuff improvs + +2007-04-06 11:23 UTC Tuomo Valkonen + * Year changed.. + +2007-04-06 11:17 UTC Tuomo Valkonen + * Function reference building improvements + +2007-04-05 16:32 UTC Tuomo Valkonen + * Bah, stupid latex2html + +2007-04-05 16:27 UTC Tuomo Valkonen + * mod_statusbar documentation + +2007-04-05 15:21 UTC Tuomo Valkonen + * Oops, mod_statusbar.lua was missing from sources + +2007-03-20 11:27 UTC Tuomo Valkonen + * Fixes + 2007-03-18 20:09 UTC Tuomo Valkonen tagged ion-doc-3ds-20070318 diff --git a/doc/Makefile b/doc/Makefile index aa203d8..ca10058 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -15,9 +15,9 @@ L2H=latex2html -show_section_numbers -short_index -local_icons -noaddress \ DOCS=ionconf ionnotes -FNTEXES=ioncore-fns.tex mod_tiling-fns.tex \ - mod_query-fns.tex de-fns.tex mod_menu-fns.tex \ - mod_dock-fns.tex mod_sp-fns.tex mod_statusbar-fns.tex +FNTEXES=ioncore.exports mod_tiling.exports \ + mod_query.exports de.exports mod_menu.exports \ + mod_dock.exports mod_sp.exports mod_statusbar.exports # Generic rules ###################################### @@ -106,29 +106,13 @@ realclean: clean # Function reference rules ###################################### -ioncore-fns.tex: $(TOPDIR)/ioncore/*.c $(TOPDIR)/ioncore/*.lua - $(MKEXPORTS) -module ioncore -mkdoc -o $@ $+ +include $(TOPDIR)/libmainloop/rx.mk -mod_tiling-fns.tex: $(TOPDIR)/mod_tiling/*.c - $(MKEXPORTS) -module mod_tiling -mkdoc -o $@ $+ +$(TOPDIR)/%/exports.tex: + $(MAKE) -C $$(dirname $@) _exports_doc -mod_query-fns.tex: $(TOPDIR)/mod_query/*.c $(TOPDIR)/mod_query/mod_query.lua - $(MKEXPORTS) -module mod_query -mkdoc -o $@ $+ - -mod_menu-fns.tex: $(TOPDIR)/mod_menu/*.c $(TOPDIR)/mod_menu/mod_menu.lua - $(MKEXPORTS) -module mod_menu -mkdoc -o $@ $+ - -mod_dock-fns.tex: $(TOPDIR)/mod_dock/*.c - $(MKEXPORTS) -module mod_dock -mkdoc -o $@ $+ - -mod_sp-fns.tex: $(TOPDIR)/mod_sp/*.c - $(MKEXPORTS) -module mod_sp -mkdoc -o $@ $+ - -mod_statusbar-fns.tex: $(TOPDIR)/mod_statusbar/*.c - $(MKEXPORTS) -module mod_statusbar -mkdoc -o $@ $+ - -de-fns.tex: $(TOPDIR)/de/*.c - $(MKEXPORTS) -module de -mkdoc -o $@ $+ +%.exports: $(TOPDIR)/%/exports.tex + cp $< $@ # Function list ###################################### diff --git a/doc/conf-bindings.tex b/doc/conf-bindings.tex index 9afb2b8..efec6a4 100644 --- a/doc/conf-bindings.tex +++ b/doc/conf-bindings.tex @@ -8,7 +8,7 @@ This, however, does not have to be so as long as the module has been loaded prior to defining any module-specific bindings. Bindings are defined by calling the function -\fnrefx{ioncore}{defbindings} with the ''context'' of the +\fnrefx{ioncore}{defbindings} with the ``context'' of the bindings and the a table of new bindings to make. The context is simply string indicating one of the classes of regions (or modes such as \type{WMoveresMode}) introduced in section \ref{sec:objects}, and fully @@ -23,7 +23,7 @@ defbindings("WFrame", { \end{verbatim} There has been some confusion among users about the need to define the -''context'' for each binding, so let me try to explain this design +``context'' for each binding, so let me try to explain this design decision here. The thing is that if there was a just a simple 'bind this key to this action' method without knowledge of the context, some limitations would have to be made on the available actions and writing @@ -34,27 +34,27 @@ classes being based on \type{WMPlex}, and in the stock configuration the switch to $n$:th workspaces is bound to \key{Mod1+n} while the switch to $n$:th tab is bound to the sequence \key{Mod1+k n}. -Currently known ''contexts'' include: -\code{WScreen}, -\code{WMPlex}, -\code{WMPlex.toplevel}, -\code{WFrame}, -\code{WFrame.toplevel}, -\code{WFrame.floating}, -\code{WFrame.tiled}, -\code{WFrame.transient}, -\code{WMoveresMode}, -\code{WGroup}, -\code{WGroupCW}, -\code{WGroupWS}, -\code{WClientWin}, -\code{WTiling}, and -\code{WStatusBar}. +Currently known contexts include: +\codestr{WScreen}, +\codestr{WMPlex}, +\codestr{WMPlex.toplevel}, +\codestr{WFrame}, +\codestr{WFrame.toplevel}, +\codestr{WFrame.floating}, +\codestr{WFrame.tiled}, +\codestr{WFrame.transient}, +\codestr{WMoveresMode}, +\codestr{WGroup}, +\codestr{WGroupCW}, +\codestr{WGroupWS}, +\codestr{WClientWin}, +\codestr{WTiling}, and +\codestr{WStatusBar}. Most of these should be self-explanatory, corresponding to objects -of class with the same name. The ones with \code{.toplevel} suffix -refer to screens and ''toplevel'' frames, i.e. frames that are -not used for transient windows. Likewise \code{.transient} refers -to frames in transient mode, and \code{.tiled} and \code{.floating} +of class with the same name. The ones with \codestr{.toplevel} suffix +refer to screens and ``toplevel'' frames, i.e. frames that are +not used for transient windows. Likewise \codestr{.transient} refers +to frames in transient mode, and \codestr{.tiled} and \codestr{.floating} to frames in, respectively, tiled and floating modes. @@ -75,9 +75,9 @@ gets to handle the action. \subsection{Binding handlers and special variables} Unlike in Ion2, in Ion3 binding handlers are not normally passed as -''anonymous functions'', although this is still possible. The preferred -method now is to pass the code of the handler as a string. Two special -variables are available in this code. These are +``anonymous functions'', although this is still possible. The preferred +method now is to pass the code of the handler as a string. Two following +special variables are available in this code. \begin{tabularx}{\linewidth}{lX} \tabhead{Variable & Description} @@ -93,11 +93,12 @@ variables are available in this code. These are the binding. \\ \code{_chld} & Object corresponding to the currently active child window of the - object referred to by \code{_}. + object referred to by \code{_}. This should seldom be needed. \end{tabularx} -For example, supposing '\code{_}' is a \type{WFrame}, the following -handler should move the active window to the right, if possible: +For example, supposing \code{_} (underscore) is a \type{WFrame}, the +following handler should move the active window to the right, if +possible: \begin{verbatim} "_:inc_index(_sub)" @@ -106,14 +107,14 @@ handler should move the active window to the right, if possible: \subsection{Guards} To suppress error messages, each binding handler may also be accompanied -by a ''guard'' expression that blocks the handler from being called when +by a ``guard'' expression that blocks the handler from being called when the guard condition is not met. Currently the following guard expressions are supported (for both \code{_sub} and \code{_chld}): \begin{tabularx}{\linewidth}{lX} \tabhead{Guard & Description} - \code{"_sub:non-nil"} & The \code{_sub} parameter must be set. \\ - \code{"_sub:SomeClass"} & The \code{_sub} parameter must be member + \codestr{\_sub:non-nil} & The \code{_sub} parameter must be set. \\ + \codestr{\_sub:SomeClass} & The \code{_sub} parameter must be member of class \type{SomeClass}. \\ \end{tabularx} @@ -127,27 +128,33 @@ functions. Key presses: \begin{itemize} - \item \fnref{kpress}\code{(keyspec, handler [, guard])}, - \item \fnref{kpress_wait}\code{(keyspec, handler [, guard])} and - \item \fnref{submap}\code{(keyspec, \{ ... more key bindings ... \})}. + \item \fnrefx{ioncore}{kpress}, and + \fnrefx{ioncore}{kpress_wait}\code{(keyspec, handler [, guard])}. + \item \fnrefx{ioncore}{submap}\code{(keyspec, \{ ... more key bindings ... \})}. + \item \fnrefx{ioncore}{submap_enter}, and + \fnrefx{ioncore}{submap_wait}\code{(handler [, guard])}. \end{itemize} Mouse actions: \begin{itemize} - \item \fnref{mclick}\code{(buttonspec, handler [, guard])}, - \item \fnref{mdblclick}\code{(buttonspec, handler [, guard])}, - \item \fnref{mpress}\code{(buttonspec, handler [, guard])} and - \item \fnref{mdrag}\code{(buttonspec, handler [, guard])}. + \item \fnrefx{ioncore}{mclick}, + \fnrefx{ioncore}{mdblclick}, + \fnrefx{ioncore}{mpress}, and + \fnrefx{ioncore}{mdrag}\code{(buttonspec, handler [, guard])}. \end{itemize} The actions that most of these functions correspond to should be clear -and as explained in the reference, \fnref{kpress_wait} is simply -\fnref{kpress} with a flag set instructing Ioncore wait for all -modifiers to be released before processing any further actions. +and as explained in the reference, \fnrefx{ioncore}{kpress_wait} is simply +\fnrefx{ioncore}{kpress} with a flag set instructing Ioncore wait for +all modifiers to be released before processing any further actions. This is to stop one from accidentally calling e.g. -\fnref{WRegion.rqclose} multiple times in a row. The \fnref{submap} -function is used to define submaps or ''prefix maps''. The second -argument to this function is table listing the key press actions -(\fnref{kpress}) in the submap +\fnref{WRegion.rqclose} multiple times in a row. The +\fnrefx{ioncore}{submap} function is used to define submaps or +``prefix maps''. The second argument to this function is table listing +the key press actions (\fnrefx{ioncore}{kpress}) in the submap. +The \fnrefx{ioncore}{submap_enter} handler is called when the submap +is entered, in which this handler is defined. Likewise, the +\fnrefx{ioncore}{submap_wait} handler is called when all modifiers +have been released while waiting for further key presses in the submap. The parameters \var{keyspec} and \var{buttonspec} are explained below in detail. The parameter \var{handler} is the handler for the binding, @@ -195,10 +202,10 @@ Most of the key names are quite intuitive while some are not. For example, the \key{Enter} key on the main part of the keyboard has the less common name \key{Return} while the one the numpad is called \key{KP\_Enter}. -The \var{keyspec} string may optionally have multiple ''modifier'' names +The \var{keyspec} string may optionally have multiple ``modifier'' names followed by a plus sign (\code{+}) as a prefix. X defines the following modifiers: -\begin{quotation} + \key{Shift}, \key{Control}, \key{Mod1} to \key{Mod5}, \key{AnyModifier} and \key{Lock}. \index{Shift@\key{Shift}} @@ -206,14 +213,13 @@ modifiers: \index{ModN@\key{ModN}} \index{AnyModifier@\key{AnyModifier}} \index{Lock@\key{Lock}} -\end{quotation} X allows binding all of these modifiers to almost any key and while this list of modifiers does not explicitly list keys such as \key{Alt}\index{Alt@\key{Alt}} that are common on modern keyboards, such keys are bound to one of the \key{ModN}. On systems running XFree86 \key{Alt} is usually \key{Mod1}. On Suns \key{Mod1} is the diamond key -and \key{Alt} something else. One of the ''flying window'' keys on so +and \key{Alt} something else. One of the ``flying window'' keys on so called Windows-keyboards is probably mapped to \key{Mod3} if you have such a key. Use the program \file{xmodmap}\index{xmodmap@\file{xmodmap}} to find out what exactly is bound where. @@ -241,8 +247,8 @@ and one of the button names \key{Button1} to specification may end with an optional area name following an @-sign. Only frames currently support areas, and the supported values in this case are -\code{"border"}, \code{"tab"}, \code{"empty_tab"}, \code{"client"} and -\code{nil} (for the whole frame). +\codestr{border}, \codestr{tab}, \codestr{empty\_tab}, \codestr{client} +and \code{nil} (for the whole frame). For example, the following code binds dragging a tab with the first button pressed to initiate tab drag\&drop handling: @@ -258,7 +264,7 @@ defbindings("WFrame", { The default binding configuration contains references to the variables \code{META} and \code{ALTMETA} instead of directly using the default -values of \code{"Mod1+"} and \code{""} (nothing). As explained in +values of \codestr{Mod1+} and \codestr{} (nothing). As explained in section \ref{sec:walkthrough}, the definitions of these variables appear in \file{cfg\_ion.lua}. This way you can easily change the the modifiers used by all bindings in the default configuration without diff --git a/doc/conf-menus.tex b/doc/conf-menus.tex index f47a5a8..531f63a 100644 --- a/doc/conf-menus.tex +++ b/doc/conf-menus.tex @@ -44,26 +44,26 @@ just like the menus defined as above. \begin{tabularx}{\linewidth}{lX} \tabhead{Menu name & Description} - \code{windowlist} & + \codestr{windowlist} & List of all client windows. Activating an entry jumps to that window. \\ - \code{workspacelist} & + \codestr{workspacelist} & List of all workspaces. Activating an entry jumps to that workspaces. \\ - \code{focuslist} & + \codestr{focuslist} & List of client windows with recent activity in them, followed by previously focused client windows. \\ - \code{focuslist_} & + \codestr{focuslist\_} & List of previously focused client windows. \\ - \code{stylemenu} & + \codestr{stylemenu} & List of available \file{look\_*.lua} style files. Activating an entry loads that style and ask to save the selection. \\ - \code{ctxmenu} & + \codestr{ctxmenu} & Context menu for given object. \\ \end{tabularx} \subsection{Defining context menus} -The ''ctxmenu'' is a special menu that is assembled from a defined context +The ``ctxmenu'' is a special menu that is assembled from a defined context menu for the object for which the menu was opened for, but also includes the context menus for the manager objects as submenus. @@ -81,9 +81,9 @@ defctxmenu("WFrame", { }) \end{verbatim} -Some of the same ''modes'' as were available for some bindings -may also be used: \code{WFrame.tiled}, \code{WFrame.floating}, -and \code{WFrame.transient}. +Some of the same ``modes'' as were available for some bindings +may also be used: \codestr{WFrame.tiled}, \codestr{WFrame.floating}, +and \codestr{WFrame.transient}. \subsection{Displaying menus} @@ -105,10 +105,7 @@ handlers (and elsewhere): \fnref{mod_menu.grabmenu} & A special version of \fnref{mod_menu.menu} that grabs the keyboard and is scrolled with a given key until all modifiers have been released, - after which the selected entry is activated. This function is meant to - be used for implementing, for example, Win***s-style \key{Alt-Tab} - handling.\footnote{See the \file{wcirculate.lua} script in the Ion - scripts repository \url{http://iki.fi/tuomov/repos/ion-scripts-3/}.} \\ + after which the selected entry is activated. \\ \end{tabularx} The \fnrefx{mod_menu}{grabmenu} function takes the extra key parameter, but diff --git a/doc/conf-statusbar.tex b/doc/conf-statusbar.tex new file mode 100644 index 0000000..2475552 --- /dev/null +++ b/doc/conf-statusbar.tex @@ -0,0 +1,124 @@ +\section{The statusbar} +\label{sec:statusbar} + +The \file{mod\_statusbar} module provides a statusbar that adapts to +layouts of tilings, using only the minimal space needed. Ion only +supports one adaptive ``status display'' object per screen, so this +statusbar is mutually exclusive with the embedded mode of \file{mod\_dock} +docks. + +The statusbar is configured in \file{cfg\_statusbar.lua}. Typically, +the configuration consists of two steps: creating a statusbar with +\fnref{mod\_statusbar.create}, and then launching the separate +\command{ion-statusd} status daemon process with +\fnref{mod_statusbar.launch_statusd}. This latter phase is done +automatically, if it was not done by the configuration file, but +the configuration file may pass extra parameters to \command{ion-statusd} +monitors. (See Section \ref{sec:statusd} for more information on +writing \command{ion-statusd} monitors.) + +A typical \file{cfg\_statusbar.lua} configuration might look as follows: + + +\begin{verbatim} +-- Create a statusbar +mod_statusbar.create{ + screen = 0, -- First screen, + pos = 'bl', -- bottom left corner + systray = true, -- Swallow systray windows + + -- The template + template = "[ %date || load:% %>load || mail:% %>mail_new/%>mail_total ]" + .. " %filler%systray", +} + +-- Launch ion-statusd. +mod_statusbar.launch_statusd{ + -- Date meter + date={ + -- ISO-8601 date format with additional abbreviated day name + date_format='%a %Y-%m-%d %H:%M', + }, +} +\end{verbatim} + + +\subsection{The template} + +The template specifies what is shown on the statusbar; for information +on the other options to \fnref{mod_statusbar.create}, see the reference. +Strings of the form \codestr{\%spec} tokens specially interpreter by +the statusbar; the rest appears verbatim. The \code{spec} typically +consists of the name of the value/meter to display (beginning with a latin +alphabet), but may be preceded by an alignment specifier and a number +specifying the minimum width. The alignment specifiers are: \codestr{>} +for right, \codestr{<} for left, and \codestr{|} for centring. Additionally, +space following \codestr{\%} (that is, the string \codestr{\% }), adds +``stretchable space'' at that point. The special string \codestr{\%filler} +may be used to flush the rest of the template to the right end of +the statusbar. + +The stretchable space works as follows: \file{mod\_statusbar} remembers +the widest string (in terms of graphical presentation) that it has +seen for each meter, unless the width has been otherwise constrained. +If there is stretchable space in the template, it tries to make the +meter always take this much space, by stretching any space found in +the direction indicated by the alignment specifier: the opposite +direction for left or right alignment, and both for centring. + +\subsection{The systray} + +The special \codestr{\%systray} and \codestr{\%systray\_*} +(\codestr{*} varying) monitors indicate where to place system tray +windows. There may be multiple of these. KDE-protocol system tray +icons are placed in \codestr{\%systray} automatically, unless disabled +with the \var{systray} option. Otherwise the \var{statusbar} winprop may +be used to place any window in any particular \codestr{\%systray\_*}. + +\subsection{Monitors} + +The part before the first +underscore of each monitor name, describes the script/plugin/module +that provides the meter, and any configuration should be passed +in the a corresponding sub-table \fnref{mod_statusbar.launch_statusd}. +Ion comes with date, load and mail (for plain old mbox) +\command{ion-statusd} monitor scripts. More may be obtained from +the scripts repository \cite{scripts}. These included scripts +provide the following monitors and their options + +\subsubsection{Date} + +Options: \var{date_format}: The date format in as seen above, +in the usual \code{strftime} format. \code{formats}: table of +formats for additional date monitors, the key being the name +of the monitor (without the \codestr{date\_} prefix). + +Monitors: \codestr{date} and other user-specified ones with the +\codestr{date\_} prefix. + + +\subsubsection{Load} + +Options: \var{update_interval}: Update interval in milliseconds +(default 10s). \var{important_threshold}: Threshold above which +the load is marked as important (default 1.5), so that the +drawing engine may be suitably hinted. \var{critical_threshold}: +Threshold above which the load is marked as critical (default 4.0). + + +Monitors: \codestr{load} (for all three values), +\codestr{load\_1min}, \codestr{load\_5min} and \codestr{load\_15min}. + + +\subsubsection{Mail} + +Options: \var{update_interval}: Update interval in milliseconds +(default 1min). \var{mbox}: mbox-format mailbox location +(default \verb!$MAIL!). +\var{files}: list of additional mailboxes, the key giving the +name of the monitor. + +Monitors: \codestr{mail\_new}, \codestr{mail\_unread}, +\codestr{mail\_total}, and corresponding +\codestr{mail\_*\_new}, \codestr{mail\_*\_unread}, and \codestr{mail\_*\_total} +for the additional mailboxes (\codestr{*} varying). diff --git a/doc/conf-winprops.tex b/doc/conf-winprops.tex index e564b47..e5e0133 100644 --- a/doc/conf-winprops.tex +++ b/doc/conf-winprops.tex @@ -1,7 +1,7 @@ \section{Winprops} \label{sec:winprops} -The so-called ''winprops''\index{Winprops} can be used to change how +The so-called ``winprops''\index{Winprops} can be used to change how specific windows are handled and to set up some kludges to deal with badly behaving applications. They are defined by calling the function \code{defwinprop} with a table containing the properties to set and the @@ -94,9 +94,9 @@ usual method of identifying windows, and how to obtain this information. \begin{winprop}{statusbar}{string} \index{statusbar@\var{statusbar}} Put the window in the statusbar, in the named tray component, - (The default tray component is called simply \code{"systray"}, + (The default tray component is called simply \codestr{systray}, and others you give names to in your custom template, always - prefixed by \code{"systray_"}. + prefixed by \codestr{systray\_}. \end{winprop} @@ -116,10 +116,10 @@ usual method of identifying windows, and how to obtain this information. \begin{winprop}{transient_mode}{string} \index{transient-mode@\var{transient_mode}} - \code{"normal"}: No change in behaviour. \code{"current"}: + \codestr{normal}: No change in behaviour. \codestr{current}: The window should be thought of as a transient for the current active client window (if any) even if it is not marked as a - transient by the application. \code{"off"}: The window should + transient by the application. \codestr{off}: The window should be handled as a normal window even if it is marked as a transient by the application. \end{winprop} @@ -159,15 +159,22 @@ only for floating windows. \subsection{Classes, roles and instances} \label{sec:classesrolesinstances} -The identification information in the winprop specification is usually the +The identification information supported are \var{class}\index{class@\var{class}!winprop}, \var{role}\index{role@\var{role}!winprop}, -\var{instance}\index{instance@\var{instance}!winprop} and -\var{name} -of the window. The \var{name} field is a Lua-style regular expression -matched against the window's title and the rest are strings that must -exactly match the corresponding window information. It is not necessary -to specify all of these fields. +\var{instance}\index{instance@\var{instance}!winprop}, +\var{name}\index{name@\var{name}!winprop}, +\var{is_transient}\index{is-transient@\var{is_transient}!winprop}, and +\var{is_dockapp}\index{is-dockapp@\var{is_dockapp}!winprop}. +It is not necessary to specify all of these fields. +The first three are strings, and must exactly match the +corresponding information obtained from the window's properties. +The \var{name} field is a Lua-style regular expression matched against +the window's title. The \var{is_transient} field is a boolean that can +be used to include or exclude transients only, while the \var{is_dockapp} +field is set by Ion for the dock windows of Window Maker dockapp protocol +dockapps. Usually this is the only information available for these +\emph{icon} windows. Ion looks for a matching winprop in the order listed by the following table. An 'E' indicates that the field must be set in the winprop @@ -179,7 +186,7 @@ fields) is tried. \begin{center} \begin{tabular}{llll} - \tabhead{\var{class} & \var{role} & \var{instance} & \var{name}} + \tabhead{\var{class} & \var{role} & \var{instance} & other} E & E & E & E \\ E & E & E & * \\ E & E & * & E \\ @@ -191,8 +198,10 @@ fields) is tried. \end{tabular} \end{center} -If there are multiple winprops with other identification information -the same but different \var{name}, the longest match is chosen. +If there are multiple matching winprops with the same +\var{class}, \var{role} and \var{instance}, but other information +different, the most recently defined one is used. + \subsection{Finding window identification} @@ -209,10 +218,10 @@ windows have this property -- use the command \command{xprop WM_ROLE}. This method, however, will not work on transients. \index{transient} -So-called ''transient windows'' are usually short-lived dialogs (although +So-called ``transient windows'' are usually short-lived dialogs (although some programs abuse this property) that have a parent window that they are -''transient for''. On tiled workspaces Ion displays these windows -simulatenously with the parent window at the bottom of the same frame. +``transient for''. On tiled workspaces Ion displays these windows +simultaneously with the parent window at the bottom of the same frame. Unfortunately \command{xprop} is stupid and can't cope with this situation, returning the parent window's properties when the transient is clicked on. For this reason you'll have to do a little extra work to get the properties @@ -221,9 +230,13 @@ fix this, but nothing seems to be happening with respect to including it in XFree86.} Finally, it should be mentioned that too many authors these days -''forget'' to set this vital identification to anything meaningful: -everything except name is the same for all of the programs's -windows, for example. +``forget'' to set this vital identification to anything meaningful: +everything except name is the same for all of the program's +windows, for example. Some other programs only set this information +after the window has been mapped, i.e. the window manager has been +told to start managing it, which is obviously too late. +Gtk applications in particular are often guilty on both counts. + \subsection{Some common examples} @@ -239,28 +252,6 @@ defwinprop{ } \end{verbatim} -\subsubsection{Fixing a Mozilla Firebird transient} - -Mozilla Firebird (0.7) incorrectly does not set the \code{WM_TRANSIENT_FOR} -property for the dialog that is used to ask the action to take for a file. -It, however, sets the the property point to the main window for the save -dialog. This can be annoying and confusing, as the first dialog is not -closed before the second is displayed. - -We'd like the first dialog to be transient to the main window. The closest -we can get to that is to consider it transient to the current window (if -there's one). Unfortunately Firebird does not set any meaningful classes, -instances or roles for the windows, so we'll have to rely on an ugly title -match. - -\begin{verbatim} -defwinprop{ - class = "MozillaFirebird-bin", - name = "Opening .*", - transient_mode = "current", -} -\end{verbatim} - \subsubsection{Forcing newly created windows in named frames} The following winprop should place xterm started with command-line parameter @@ -275,7 +266,7 @@ defwinprop{ \end{verbatim} For this example to work, we have to somehow create a frame named -\code{sysmonframe}. One way to do this is to make the following +\codestr{sysmonframe}. One way to do this is to make the following call in the \key{Mod1+F3} Lua code query: \begin{verbatim} @@ -285,5 +276,5 @@ mod_query.query_renameframe(_) Recall that \code{_} points to the multiplexer (frame or screen) in which the query was opened. Running this code should open a new query prefilled with the current name of the frame. In our example we would change the -name to \code{sysmonframe}, but we could just as well have used the +name to \codestr{sysmonframe}, but we could just as well have used the default name formed from the frame's class name and an instance number. diff --git a/doc/conf.tex b/doc/conf.tex index eb0f565..ed19b51 100644 --- a/doc/conf.tex +++ b/doc/conf.tex @@ -15,8 +15,8 @@ configuration file \file{ion.lua} is provided in section \ref{sec:walkthrough}. How keys and mouse action are bound to functions is described in detail in \ref{sec:bindings} and in section \ref{sec:winprops} winprops are -explained. For a reference on exported functions, see section -\ref{sec:exports}. +explained. Finally, the statusbar is explained in \ref{sec:statusbar}. +For a reference on exported functions, see section \ref{sec:exports}. \section{The configuration files} \label{sec:conffiles} @@ -44,7 +44,7 @@ file in \file{\~{}/.ion3/} and modify this file. When searching for a file, if no extension or path component is given, compiled \file{.lc} files are attempted before \file{.lua} files. -All the configuration files are named \file{cfg\_*.lua} with the ''\file{*}'' +All the configuration files are named \file{cfg\_*.lua} with the ``\file{*}'' part varying. The configuration file for each module \file{mod\_modname} is \file{cfg\_modname.lua}, with \file{modname} varying by the module in question. The following table summarises these and other configuration @@ -91,19 +91,21 @@ file. Some basic 'feel' settings are usually configured there and the necessary modules and other configuration files configuring some more specific aspects of Ion are loaded there. In this section we take a walk through the stock \file{cfg\_ion.lua}. -Notice that most of the settings are commented-out (\code{--} is a +Notice that most of the settings are commented-out (\verb!--! is a line comment in Lua) in the actual file, as they're the defaults nevertheless. -The first thing one in the file is to set +The first thing done in the file, is to set \begin{verbatim} META="Mod1+" ALTMETA="" \end{verbatim} These settings cause most of Ion's key bindings to use \key{Mod1} as the -modifier key. If \code{ALTMETA} is set, it is used as modifier for the keys -that don't normally use a modifier. for details on modifiers and key -binding setup in general see section \ref{sec:bindings}. +modifier key. If \code{ALTMETA} is set, it is used as modifier for the +keys that don't normally use a modifier. Note that these two are Lua +variables used in the configuration files only, and not Ion settings. +For details on modifiers and key binding setup in general, see section +\ref{sec:bindings}. Next we do some basic feel configuration: @@ -134,7 +136,7 @@ There are some other options as well; see the documentation for \fnref{ioncore.set} for details. As a next step, in the actual \file{cfg\_ion.lua} file, we load -\file{cfg\_defaults.lua}. However, it is merely a conveniency file for +\file{cfg\_defaults.lua}. However, it is merely a convenience file for doing exactly what we will going through below, and what is commented out in the actual file. If you do not want to load what \file{cfg\_defaults.lua} loads, just comment out the corresponding @@ -150,8 +152,8 @@ dopath("cfg_layouts") Most bindings and menus are defined in \file{cfg\_ioncore.lua}. Details on making such definitions follow in sections \ref{sec:bindings} and \ref{sec:menus}, respectively. -some kludges or ''winprops'' to make some applications behave better -under Ion are colledted in \file{cfg\_kludges.lua}; see section +some kludges or ``winprops'' to make some applications behave better +under Ion are collected in \file{cfg\_kludges.lua}; see section \ref{sec:winprops} for details. In addition to these, this file lists quite a few statements of the form \begin{verbatim} @@ -184,3 +186,7 @@ dopath("mod_sp") \input{conf-menus.tex} \input{conf-winprops.tex} + +\input{conf-statusbar.tex} + + diff --git a/doc/confintro.tex b/doc/confintro.tex index 9331614..a04af82 100644 --- a/doc/confintro.tex +++ b/doc/confintro.tex @@ -1,52 +1,50 @@ \chapter{Introduction} -This document is an ''advanced user'' manual for Ion, the X11 window manager, -and version 3 specifically. It is an attempt attempt at documenting what is -in Ion's configuration files, how to configure Ion by simple modifications +This document is an ``advanced user'' manual for the X11 window manager +Ion, version 3. It is an attempt at documenting things that go into Ion's +configuration files, how to configure Ion by simple modifications to these files and how to write more complex extensions in Lua, the lightweight configuration and scripting language used by Ion. -Readers unfamiliar with Lua is advised to first glance at the Lua manual at +Readers unfamiliar with Lua might first want to first glance at some +Lua documentation at -\centerurl{http://www.lua.org/docs.html} +\begin{center} + \url{http://www.lua.org/docs.html}, or \\ + \url{http://lua-users.org/wiki/LuaTutorial}, +\end{center} -and perhaps some tutorial pages at the lua-users wiki: - -\centerurl{http://lua-users.org/wiki/LuaTutorial} +although this should not be strictly necessary for basic modifications +of configuration files for anyone with at least some familiarity with +programming languages. Back in this document, first in chapter \ref{chap:prelim} some key -concepts and relations are explained. These include the module system -and Ion's object and class hierarchies. While it might not at first -occur that knowing such things would be necessary to \emph{configure} -a program, this material is essential because of the object-oriented -nature of most of Ion's scripting interface. - -The new user, fed up with the default key bindings and eager to just -quickly configure Ion to his liking may question the reasons for -exposing the ''heavy'' internal OO structure in the scripting and -configuration interface. I'm not the one to blame him for that. -Sure it would be faster to configure Ion to everyone's liking -if a simpler binding configuration interface was provided. Such an -interface would, however, also be far more limited and make writing -extensions more complicated and the advantages from using a real -scripting language would be partly lost. One more advantage from -a rich scripting and configuration interface is that it allows -implementing scripts to read alternate configuration file formats, -ones that could be, for example, modified by external configuration tools. - -In chapter \ref{chap:config} the very basic Ion configuration know-how -is provided. All the different configuration files and their locations -are explained and instructions are given to allow the reader to -configure bindings and so-called ''winprops''. Chapter \ref{chap:gr} -explains the notion of drawing engines and graphical styles and how to -write new looks for Ion and more advanced aspects of Ion's scripting -interface are documented in chapter \ref{chap:tricks} (a work in -progress). - +concepts and relations are explained. These include the module system, +and Ion's object (or ``region'') and class hierarchies. While it may +not be necessary to study the latter for basic copy-paste modifications +of configuration files -- for that you should not really need this +manual either -- it is, however, essential to for more extensive +customisation, due to the semi-object-oriented nature of most of +Ion's scripting interface. Knowing the different object types also +helps dealing with the different binding ``contexts'' (see +Section \ref{sec:bindings}) that to some extent mirror these classes. + +The new user, fed up with the default key bindings and eager to +just quickly configure Ion to his liking, may therefore just want +to skip to Chapter \ref{chap:config}, and attempt to work from therefore. +That chapter provides the very basic Ion configuration know-how +is provided: all the different configuration files and their locations +are explained, instructions are given to allow the reader to +configure bindings and so-called ``winprops'', and the statusbar +templates are also explained. + +Next, Chapter \ref{chap:gr} explains the notion of drawing engines +and graphical styles and how to write new looks for Ion. More advanced +aspects of Ion's scripting interface are documented in Chapter +\ref{chap:tricks}. Finally, most of the functions provided by Ion's scripting interface -are listed and documented in the Function reference in chapter -\ref{sec:exports}. At the end of the document is an alphabetical -listing of all these functions. - +are listed and documented in the Function reference in Chapter +\ref{sec:exports}. At the end of the document an alphabetical +listing of all these functions may be found. diff --git a/doc/cstyle.tex b/doc/cstyle.tex index 328a7c3..e7f5917 100644 --- a/doc/cstyle.tex +++ b/doc/cstyle.tex @@ -1,6 +1,6 @@ \section{C coding style} -If you want to submit patches to Ion, you MUST follow my coding +If you want to submit patches to Ion, you \textbf{must} follow my coding style, even if you think it is the root of all evil. We don't want the code to be an incomprehensible mess of styles and I have better things to do than fix other people's style to match mine. The style @@ -10,7 +10,7 @@ things to take note of. \subsection{Whitespace} \begin{itemize} - \item Indentations of 4 with \emph{tab size=4}. + \item Indentations of 4 with spaces. \item No extra spaces between operators, delimiters etc. except \begin{itemize} diff --git a/doc/de.tex b/doc/de.tex index 4697dc6..93402a7 100644 --- a/doc/de.tex +++ b/doc/de.tex @@ -5,7 +5,9 @@ This chapter first gives in section \ref{sec:engines} a general outline of how drawing engines are used, of style specifications and then in section \ref{sec:defaultde} describes how to specify styles -for the default drawing engine. +for the default drawing engine. Some additional settings and +user attributes are explained in Sections \ref{sec:grmisc}. + \section{Drawing engines, style specifications and sub-styles} \label{sec:engines} @@ -13,7 +15,7 @@ for the default drawing engine. Ion's drawing routines are abstracted into so-called drawing engine modules that can, again depending on the system, be dynamically -loaded as needed. The drawing engine modules provide ''brushes'' +loaded as needed. The drawing engine modules provide ``brushes'' that objects can use to draw some high-level primitives such as borders and text boxes (in addition to simple text and rectangle drawing) on their windows and configure e.g. the shape and @@ -28,16 +30,16 @@ are strings of the form element1-element2-...-elementn \end{verbatim} -An example of such a style specification is \code{tab-frame}; +An example of such a style specification is \codestr{tab-frame}; see the table in subsection \ref{sec:styles} for more styles. When an object asks for a brush of certain style, the selected drawing engine will attempt to find the closest match to this specification. The styles/brushes defined by the drawing engines -may have asterisks (\verb!*!) as some of the elements indicating +may have asterisks (\codestr{*}) as some of the elements indicating a match to anything. Exact matches are preferred to asterisk matches and longer matches to shorter. For example, let a brush -for style \code{foo-bar-baz} be queried, then the following +for style \codestr{foo-bar-baz} be queried, then the following brushes are in order of preference: \begin{verbatim} @@ -70,19 +72,19 @@ tag and drag states.) \begin{tabularx}{\linewidth}{lX} \tabhead{Style name & Description} -\code{frame} & Style for frames. - Substyle attributes: \code{active}/\code{inactive} +\codestr{frame} & Style for frames. + Substyle attributes: \codestr{active}/\codestr{inactive} (mutually exclusive) and - \code{quasiactive}\nobreak/\code{not_quasiactive}. + \codestr{quasiactive}/\codestr{not\_quasiactive}. A frame is ``quasiactive'' when an active region - has a backlink to it, such as a detached window. \\ -\code{frame-tiled} & A more specific style for tiled frames. - Substyle attributes as for \code{frame}. \\ -\code{frame-tiled-alt} & An alternative style for tiled frames. + has a back-link to it, such as a detached window. \\ +\codestr{frame-tiled} & A more specific style for tiled frames. + Substyle attributes as for \codestr{frame}. \\ +\codestr{frame-tiled-alt} & An alternative style for tiled frames. Often used to disable the tab-bar. \\ -\code{frame-floating} & A more specific style for floating +\codestr{frame-floating} & A more specific style for floating frames. \\ -\code{frame-transient} & A more specific style for frames +\codestr{frame-transient} & A more specific style for frames containing transient windows. \\ \end{tabularx} @@ -90,25 +92,25 @@ tag and drag states.) \begin{tabularx}{\linewidth}{lX} \tabhead{Style name & Description} -\code{tab} & Style for frames' tabs and menu entries. +\codestr{tab} & Style for frames' tabs and menu entries. Substyle attributes: - \code{active}\nobreak/\code{inactive} and - \code{selected}\nobreak/\code{unselected} \\ -\code{tab-frame} & A more specific style for frames' tabs. + \codestr{active}/\codestr{inactive} and + \codestr{selected}/\codestr{unselected} \\ +\codestr{tab-frame} & A more specific style for frames' tabs. Additional substyle attributes include: - \code{tagged}\nobreak/\code{not_tagged}, - \code{dragged}\nobreak/\code{not_dragged}, - \code{activity}\nobreak/\code{no_activity} and - \code{quasiactive}\nobreak/\code{not_quasiactive}. \\ -\code{tab-frame-tiled}, & \\ -\code{tab-frame-tiled-alt}, & \\ -\code{tab-frame-floating}, & \\ -\code{tab-frame-transient} & More specific styles for frames in the + \codestr{tagged}/\codestr{not\_tagged}, + \codestr{dragged}/\codestr{not\_dragged}, + \codestr{activity}/\codestr{no\_activity}, + \codestr{quasiactive}/\codestr{not\_quasiactive}. \\ +\codestr{tab-frame-tiled}, & \\ +\codestr{tab-frame-tiled-alt}, & \\ +\codestr{tab-frame-floating}, & \\ +\codestr{tab-frame-transient} & More specific styles for frames in the different modes. \\ -\code{tab-menuentry} & A more specific style for entries in \type{WMenu}s. - Additional substyle attributes include \code{submenu} and - occasionally also \code{activity} is used.\\ -\code{tab-menuentry-bigmenu} & +\codestr{tab-menuentry} & A more specific style for entries in \type{WMenu}s. + Additional substyle attributes include \codestr{submenu} and + occasionally also \codestr{activity} is used.\\ +\codestr{tab-menuentry-bigmenu} & An alternate style for entries in \type{WMenu}s. \\ \end{tabularx} @@ -116,16 +118,21 @@ tag and drag states.) \begin{tabularx}{\linewidth}{lX} \tabhead{Style name & Description} -\code{input} & A style for \type{WInput}s. \\ -\code{input-edln} & A more specific style for \type{WEdln}s. - Substyle attributes: \code{selection} for selected text and - \code{cursor} for the cursor indicating current editing point. \\ -\code{input-message} & A more specific style for \type{WMessage}s. \\ -\code{input-menu} & A more specific style for \type{WMenu}s. \\ -\code{input-menu-bigmenu} & An alternate style for \type{WMenu}s. \\ -\code{moveres_display} & The box displaying position/size when +\codestr{input} & A style for \type{WInput}s. \\ +\codestr{input-edln} & A more specific style for \type{WEdln}s. + Substyle attributes: \codestr{selection} for selected text and + \codestr{cursor} for the cursor indicating current editing point. \\ +\codestr{input-message} & A more specific style for \type{WMessage}s. \\ +\codestr{input-menu} & A more specific style for \type{WMenu}s. \\ +\codestr{input-menu-bigmenu} & An alternate style for \type{WMenu}s. \\ +\codestr{moveres\_display} & The box displaying position/size when moving or resizing frames. \\ -\code{dock} & The dock. \\ +\codestr{stdisp} & Any status display. \\ +\codestr{stdisp-dock} & The dock. \\ +\codestr{stdisp-statusbar} & The statusbar. Substyles include: + the name of any monitor/meter (such as \codestr{date}), and + the supplied hint. Typical hints are: \codestr{normal}, + \codestr{important}, and \codestr{critical}. \\ \end{tabularx} @@ -153,13 +160,13 @@ end The \fnref{gr.select_engine} function sees if the engine given as argument is registered (the default drawing engine is -simply called ''de''). If the engine could not be found, it +simply called ``de''). If the engine could not be found, it tries to load a module of the same name. If the engine still -is not registered, \fnref{gr.select_engine} returns \code{false} +is not registered, \fnref{gr.select_engine} returns \codestr{false} and in this case we also exit the style setup script. If the engine was found, \fnref{gr.select_engine} sees that further requests for brushes are forwarded to that engine -and returns \code{true}. +and returns \codestr{true}. Before defining new styles it may be a good idea to clear old styles from memory so if the old configuration defines more @@ -230,16 +237,16 @@ in \file{/usr/X11R6/lib/X11/rgb.txt} (exact path varying). \begin{tabularx}{\linewidth}{lX} \tabhead{Field & Description} \var{highlight_colour} & - Colour for the ''highlight'' part of a border. \\ + Colour for the ``highlight'' part of a border. \\ \var{shadow_colour} & - Colour for the ''highlight'' part of a border. \\ + Colour for the ``shadow'' part of a border. \\ \var{foreground_colour} & Colour for the normal drawing operations, e.g. text. \\ \var{background_colour} & Window background colour (unless transparency is enabled) and background colour boxes. \\ \var{padding_colour} & - Colour for the ''padding'' part of a border border. Set to + Colour for the ``padding'' part of a border border. Set to \var{background_colour} if unset. \\ \end{tabularx} @@ -252,12 +259,12 @@ indicating a number of pixels. \begin{tabularx}{\linewidth}{lX} \tabhead{Field & Description} \var{border_style} & A string indicating the style of border; one of - elevated/inlaid/ridge/groove as seen in the - above sketch. \\ + \codestr{elevated}/\codestr{inlaid}/\codestr{ridge}/\codestr{groove} + as seen in the above sketch. \\ \var{border_sides} & A string indicating which sides of the border - to draw: all/tb/lr for all, top and bottom, and - left and right. To control between left/right - and top/bottom, use the pixel options below. \\ + to draw: \codestr{all}/\codestr{tb}/\codestr{lr} for all, + top and bottom, and left and right. To control between + left/right and top/bottom, use the pixel options below. \\ \var{highlight_pixels} & Width of the highlight part of the border in pixels. \\ \var{shadow_pixels} & @@ -276,7 +283,7 @@ indicating a number of pixels. \var{font} & Font to be used in text-drawing operations; standard X font name. \\ \var{text_align} & How text is to be aligned in text boxes/tabs; one of - the strings left\nobreak/right\nobreak/center. \\ + the strings \codestr{left}/\codestr{right}/\codestr{center}. \\ \end{tabularx} @@ -295,13 +302,13 @@ indicating a number of pixels. \subsubsection{Substyles} As discussed in previous sections, styles may have substyles to e.g. -indicate different states of the object being drawn. The ''de'' engine +indicate different states of the object being drawn. The ``de'' engine limits what can be configured in substyles to the set of colours in the first table above, but also specifically interprets for the main style -\code{tab-frame} the substyles \code{*-*-tagged} and \code{*-*-*-dragged} +\codestr{tab-frame} the substyles \codestr{*-*-tagged} and \codestr{*-*-*-dragged} by, respectively, drawing a right angle shape at the top right corner of a tab and by shading the tab with a stipple pattern. Also for -menus the substyles \code{*-*-submenu} are handled as a special case. +menus the substyles \codestr{*-*-submenu} are handled as a special case. Substyles are defined with the function \fnref{de.substyle} within the table defining the main style. The parameters to this function are @@ -359,18 +366,32 @@ de.defstyle("tab-frame", { \section{Miscellaneous settings} +\label{sec:grmisc} + + +\subsection{Frame user attributes} + +The function \fnref{WFrame.set_grattr} may be used to give frames +(and their tabs) arbitrary extra attributes to be passed to the +drawing engine. Hence, by configuring such substyles in the style +configuration files, and turning on the attribute when needed, +scripts may display visual cues related to the frame. There is +also one extra attribute specially interpreted by the default +drawing engine: the \codestr{numbered} attribute, which causes +numbers to be displayed on the tabs. + + +\subsection{Extra fields for style \codestr{frame}} The following style fields are independent of the drawing engine used, but are related to objects' styles and therefore configured in the drawing engine configuration file. -\subsection{Extra fields for style \code{frame}} - \begin{tabularx}{\linewidth}{lX} \tabhead{Field & Description} \code{bar} & Controls the style of the tab-bar. Possible values - are the strings \code{"none"}, \code{"inside"}, \code{"outside"} - and \code{"shaped"}, with the last providing the PWM-style + are the strings \codestr{none}, \codestr{inside}, \codestr{outside} + and \codestr{shaped}, with the last providing the PWM-style tab-bars for floating frames. \\ \code{floatframe_tab_min_w} & Minimum tab width in pixels for the shaped style, given that this number times number of tabs @@ -380,15 +401,17 @@ engine configuration file. interval $(0, 1]$. \end{tabularx} -\subsection{Extra fields for style \code{dock}} + + +\subsection{Extra fields for style \codestr{dock}} \begin{tabularx}{\linewidth}{lX} \tabhead{Field & Description} \code{outline_style} & How borders are drawn: - \code{"none"} -- no border, - \code{"all"} -- border around whole dock, - \code{"each"} -- border around each dockapp. \\ -\code{tile_size} & A table with entries \code{width} and \code{height}, + \codestr{none} -- no border, + \codestr{all} -- border around whole dock, + \codestr{each} -- border around each dockapp. \\ +\code{tile_size} & A table with entries \codestr{width} and \codestr{height}, indicating the width and height of tiles in pixels. \end{tabularx} diff --git a/doc/designnotes.tex b/doc/designnotes.tex index 4bb6485..e22ed89 100644 --- a/doc/designnotes.tex +++ b/doc/designnotes.tex @@ -6,8 +6,8 @@ To keep Ion's code as simple as possible yet safe, there are restrictions when the \type{WObj} \code{destroy_obj}\index{destroy-obj@\code{destroy_obj}} function that calls watches, the deinit routine and frees memory may -be called directly. In all other cases the -\code{defer_destroy}\index{defer-destroy@\code{defer_destroy}} +be called directly. In all other cases the \code{mainloop_defer_destroy}% +\index{mainloop-defer-destroy@\code{mainloop_defer_destroy}} function should be used to defer the call of \code{destroy_obj} until Ioncore returns to its main event loop. @@ -20,8 +20,8 @@ following cases: that wants to get rid of the object. This is the case, for example, when the function created a frame to manage some other object but for some reason failed to reparent the object to this frame. - \item In a deferred action handler set with - \code{defer_action}\index{defer-action@\code{defer_action}}. + \item In a deferred action handler set with \code{mainloop_defer_action}% + \index{mainloop-defer-action@\code{mainloop_defer_action}}. Like deferred destroys, other deferred actions are called when Ioncore has returned to the main loop. \item You are absolute sure that C code outside your code has no @@ -30,7 +30,7 @@ following cases: If there are no serious side effects from deferring destroying the object or you're unsure whether it is safe to destroy the object -immediately, use \code{defer_destroy}. +immediately, use \code{mainloop_defer_destroy}. \subsection{The types \code{char*} and \code{const char*} as function parameters and return values} @@ -47,7 +47,7 @@ parameters to functions. For further reference a copy must be made. \\ \code{char*} & The string is the caller's responsibility and it \emph{must} free it when no longer needed. & - The called function may modify the string but the ''owner'' of + The called function may modify the string but the ``owner'' of the string is case-dependant. \\ \end{tabularx} diff --git a/doc/exact-version b/doc/exact-version index 483b164..8549f12 100644 --- a/doc/exact-version +++ b/doc/exact-version @@ -1,5 +1,5 @@ Context: -[TAG ion-doc-3ds-20070318 -Tuomo Valkonen **20070318200902] +[TAG ion-doc-3rc-20070506 +Tuomo Valkonen **20070506144001] diff --git a/doc/fnref.tex b/doc/fnref.tex index c0590b6..7c6e45a 100644 --- a/doc/fnref.tex +++ b/doc/fnref.tex @@ -3,40 +3,44 @@ \section{Functions defined in \file{ioncore}} \label{sec:ioncoreref} -\input{ioncore-fns.tex} +\input{ioncore.exports} \section{Functions defined in \file{mod\_tiling}} \label{sec:tilingref} -\input{mod_tiling-fns.tex} +\input{mod_tiling.exports} %\section{Functions defined in \file{mod\_panews}} %\label{sec:panewsref} -%\input{mod_panews-fns.tex} +%\input{mod_panews.exports} \section{Functions defined in \file{mod\_query}} \label{sec:queryref} -\input{mod_query-fns.tex} +\input{mod_query.exports} \section{Functions defined in \file{mod\_menu}} \label{sec:menuref} -\input{mod_menu-fns.tex} +\input{mod_menu.exports} \section{Functions defined in \file{mod\_dock}} \label{sec:dockref} -\input{mod_dock-fns.tex} +\input{mod_dock.exports} \section{Functions defined in \file{mod\_sp}} \label{sec:spref} -\input{mod_sp-fns.tex} +\input{mod_sp.exports} \section{Functions defined in \file{mod\_statusbar}} \label{sec:statusbarref} -\input{mod_statusbar-fns.tex} +\input{mod_statusbar.exports} \section{Functions defined in \file{de}} \label{sec:deref} -\input{de-fns.tex} +\input{de.exports} \section{Hooks} \label{sec:hookref} \input{hookref} + +\section{Miscellaneous} +\label{sec:miscref} +\input{miscref} diff --git a/doc/fullhierarchy.tex b/doc/fullhierarchy.tex index 8e1cfa9..51a0e84 100644 --- a/doc/fullhierarchy.tex +++ b/doc/fullhierarchy.tex @@ -11,7 +11,6 @@ |-->WHook |-->WTimer |-->WMoveresMode - |-->WMgmtMode (mod_mgmtmode) |-->WRegion | |-->WClientWin | |-->WWindow diff --git a/doc/hookref.tex b/doc/hookref.tex index 4c26562..5e0c05f 100644 --- a/doc/hookref.tex +++ b/doc/hookref.tex @@ -12,7 +12,7 @@ \var{switchto} & bool & Do we want to switch to the client window. \\ \var{jumpto} & bool & Do we want to jump to the client window. \\ \var{userpos} & bool & Geometry set by user. \\ - \var{dockapp} & bool & Client window is a dockapp. \\ + \var{dockapp} & bool & Client window is a dock-app. \\ \var{maprq} & bool & Map request (and not initialisation scan). \\ \var{gravity} & number & Window gravity. \\ \var{geom} & table & Requested geometry; \var{x}, \var{y}, \var{w}, \var{h}.\\ @@ -75,9 +75,9 @@ reg:attach(cwin) \begin{tabularx}{\linewidth}{llX} \tabhead{Field & Type & Description} \var{reg} & WFrame & The frame in question \\ - \var{mode} & string & \var{"switchonly"}, \var{"reorder"}, - \var{"add"} or \var{"remove"} \\ - \var{sw} & bool & Switch occured \\ + \var{mode} & string & \codestr{switchonly}, \codestr{reorder}, + \codestr{add} or \codestr{remove} \\ + \var{sw} & bool & Switch occurred \\ \var{sub} & WRegion & The managed region (primarily) affected \\ \end{tabularx} \end{funcdesc} @@ -111,7 +111,7 @@ reg:attach(cwin) \hookparams{()} \begin{funcdesc} Called when Ion has done all initialisation and is almost ready to - enter the mainloop, except no windows are yet being managed. + enter the main-loop, except no windows are yet being managed. \end{funcdesc} \end{function} @@ -126,6 +126,16 @@ reg:attach(cwin) \end{function} +\begin{function} + \index{ioncore-submap-ungrab-hook@\code{ioncore_submap_ungrab_hook}} + \hookname{ioncore_submap_ungrab_hook} + \hookparams{()} + \begin{funcdesc} + This hook is used to signal whenever Ion leaves the submap grab mode. + \end{funcdesc} +\end{function} + + \begin{function} \index{tiling-placement-alt@\code{tiling_placement_alt}} \hookname{tiling_placement_alt} @@ -141,7 +151,7 @@ reg:attach(cwin) the moment) to be placed \\ \var{mp} & \type{table} & This table contains the same fields as the parameter of \fnref{clientwin_do_manage_alt} \\ - \var{res_frame} & \type{WFrame} & A succesfull handler should + \var{res_frame} & \type{WFrame} & A successful handler should return the target frame here. \\ \end{tabularx} This hook is just for placing within a given workspace after the @@ -196,12 +206,12 @@ reg:attach(cwin) \code{unset_manager} & The region no longer has a manager. \\ \code{set_manager} & The region now has a manager. \\ \code{tag} & Tagging state has changed. \\ - \code{pseudoactivated} & The region has become pseudoactive + \code{pseudoactivated} & The region has become pseudo-active (see below). \\ - \code{pseudoinactivated} & The region is no longer pseudoactive. \\ + \code{pseudoinactivated} & The region is no longer pseudo-active. \\ \end{tabularx} - A region is pseudoactive, when a) it is itself not active (does + A region is pseudo-active, when a) it is itself not active (does not not have the focus, and may not even have a window that could have it), but b) some region managed by it is active. \end{funcdesc} diff --git a/doc/ionconf.dvi.gz b/doc/ionconf.dvi.gz index acdd808..f7e0ba9 100644 Binary files a/doc/ionconf.dvi.gz and b/doc/ionconf.dvi.gz differ diff --git a/doc/ionconf.out b/doc/ionconf.out index 7882440..385ef4f 100644 --- a/doc/ionconf.out +++ b/doc/ionconf.out @@ -26,6 +26,10 @@ \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} @@ -34,15 +38,16 @@ \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} @@ -50,17 +55,19 @@ \BOOKMARK [2][-]{subsection.6.1.3}{ WGroup functions}{section.6.1} \BOOKMARK [2][-]{subsection.6.1.4}{ WGroupCW functions}{section.6.1} \BOOKMARK [2][-]{subsection.6.1.5}{ WGroupWS functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.6}{ WInfoWin functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.7}{ WMPlex functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.8}{ WMoveresMode functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.9}{ WRegion functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.10}{ WRootWin functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.11}{ WScreen functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.12}{ WWindow functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.13}{ global functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.14}{ gr functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.15}{ string functions}{section.6.1} -\BOOKMARK [2][-]{subsection.6.1.16}{ table functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.6}{ WHook functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.7}{ WInfoWin functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.8}{ WMPlex functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.9}{ WMoveresMode functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.10}{ WRegion functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.11}{ WRootWin functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.12}{ WScreen functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.13}{ WTimer functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.14}{ WWindow functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.15}{ global functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.16}{ gr functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.17}{ string functions}{section.6.1} +\BOOKMARK [2][-]{subsection.6.1.18}{ table functions}{section.6.1} \BOOKMARK [1][-]{section.6.2}{ Functions defined in mod\137tiling}{chapter.6} \BOOKMARK [2][-]{subsection.6.2.1}{ WSplit functions}{section.6.2} \BOOKMARK [2][-]{subsection.6.2.2}{ WSplitInner functions}{section.6.2} @@ -80,6 +87,9 @@ \BOOKMARK [2][-]{subsection.6.7.1}{ WStatusBar functions}{section.6.7} \BOOKMARK [1][-]{section.6.8}{ Functions defined in de}{chapter.6} \BOOKMARK [1][-]{section.6.9}{ Hooks}{chapter.6} +\BOOKMARK [1][-]{section.6.10}{ Miscellaneous}{chapter.6} +\BOOKMARK [2][-]{subsection.6.10.1}{ Size policies}{section.6.10} \BOOKMARK [0][-]{appendix.A}{ The GNU General Public License}{} \BOOKMARK [0][-]{appendix.B}{ Full class hierarchy visible to Lua-side}{} -\BOOKMARK [0][-]{section*.17}{Index}{} +\BOOKMARK [0][-]{section*.19}{Index}{} +\BOOKMARK [0][-]{section*.21}{Bibliography}{} diff --git a/doc/ionconf.ps.gz b/doc/ionconf.ps.gz index 3f368d7..c59b71a 100644 Binary files a/doc/ionconf.ps.gz and b/doc/ionconf.ps.gz differ diff --git a/doc/ionconf.tex b/doc/ionconf.tex index b12cb17..1bd52af 100644 --- a/doc/ionconf.tex +++ b/doc/ionconf.tex @@ -10,7 +10,7 @@ \title{Configuring and extending Ion3 with Lua} \author{Tuomo Valkonen \\ tuomov at iki.fi} -\date{2007-03-18} +\date{2007-05-06} \makeindex @@ -20,7 +20,7 @@ \maketitle Configuring and extending Ion3 with Lua\\ -Copyright \copyright\ 2003--2005 Tuomo Valkonen. +Copyright \copyright\ 2003--2007 Tuomo Valkonen. This document is free; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ the Free Software Foundation; either version 2 of the License, or This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -chapter entitled ''GNU General Public License'' for more details. +chapter entitled ``GNU General Public License'' for more details. \tableofcontents @@ -70,4 +70,9 @@ chapter entitled ''GNU General Public License'' for more details. \printindex +\begin{thebibliography}{9} + \bibitem{scripts} The Ion 3 scripts repository, + \url{http://iki.fi/tuomov/repos/ion-scripts-3/}. +\end{thebibliography} + \end{document} diff --git a/doc/ionconf/images.log b/doc/ionconf/images.log index 2475ca5..aee5f70 100644 --- a/doc/ionconf/images.log +++ b/doc/ionconf/images.log @@ -1,4 +1,4 @@ -This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2007.2.4) 18 MAR 2007 22:35 +This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2007.4.8) 6 MAY 2007 17:46 entering extended mode **./images.tex (./images.tex @@ -353,42 +353,42 @@ LaTeX Font Info: External font `cmex10' loaded for size (Font) <8> on input line 235. LaTeX Font Info: External font `cmex10' loaded for size (Font) <6> on input line 235. -l2hSize :tex2html_wrap_inline1041:7.0626pt::0.0pt::7.1201pt. +l2hSize :tex2html_wrap_inline1055:7.0626pt::0.0pt::7.1201pt. [1 ] -l2hSize :tex2html_wrap_inline1045:7.48248pt::0.0pt::48.86426pt. +l2hSize :tex2html_wrap_inline1059:7.48248pt::0.0pt::48.86426pt. [2 ] -l2hSize :tex2html_wrap_inline2020:8.7125pt::8.7125pt::23.6642pt. +l2hSize :tex2html_wrap_inline2241:8.7125pt::8.7125pt::23.6642pt. [3 ] -l2hSize :tex2html_wrap_inline6387:7.5626pt::7.5626pt::14.53923pt. +l2hSize :tex2html_wrap_inline5502:7.5626pt::7.5626pt::14.53923pt. [4 ] -l2hSize :tex2html_wrap_inline6389:7.5626pt::7.5626pt::14.53923pt. +l2hSize :tex2html_wrap_inline5504:7.5626pt::7.5626pt::14.53923pt. [5 ] -l2hSize :tex2html_wrap_inline9409:8.7125pt::8.7125pt::86.9574pt. +l2hSize :tex2html_wrap_inline7754:8.7125pt::8.7125pt::86.9574pt. [6 ] (./images.aux) ) Here is how much of TeX's memory you used: - 4443 strings out of 94501 - 62984 string characters out of 1175795 - 122206 words of memory out of 1000000 - 7587 multiletter control sequences out of 10000+50000 + 4467 strings out of 94501 + 63452 string characters out of 1175795 + 123525 words of memory out of 1000000 + 7611 multiletter control sequences out of 10000+50000 7874 words of font info for 24 fonts, out of 500000 for 2000 580 hyphenation exceptions out of 8191 28i,5n,21p,200b,182s stack positions out of 1500i,500n,5000p,200000b,5000s diff --git a/doc/ionconf/images.pl b/doc/ionconf/images.pl index 6d0ccb4..d6e7651 100644 --- a/doc/ionconf/images.pl +++ b/doc/ionconf/images.pl @@ -2,5 +2,41 @@ # Associate images original text with physical files. +$key = q/-1;MSF=1.6;LFS=11;AAT/; +$cached_env_img{$key} = q|$-1$|; + +$key = q/(0,1];MSF=1.6;LFS=11;AAT/; +$cached_env_img{$key} = q|$(0, 1]$|; + +$key = q/N=1{ldots}5;MSF=1.6;LFS=11;AAT/; +$cached_env_img{$key} = q|$N=1{\ldots} 5$|; + +$key = q/-2;MSF=1.6;LFS=11;AAT/; +$cached_env_img{$key} = q|$-2$|; + +$key = q/n;MSF=1.6;LFS=11;AAT/; +$cached_env_img{$key} = q|$n$|; + +$key = q/{t,m,b}times{t,c,b};MSF=1.6;LFS=11;AAT/; +$cached_env_img{$key} = q|$\{t,m,b\}\times\{t,c,b\}$|; + 1; diff --git a/doc/ionconf/images.tex b/doc/ionconf/images.tex index 8ab5731..2912e90 100644 --- a/doc/ionconf/images.tex +++ b/doc/ionconf/images.tex @@ -18,8 +18,7 @@ \usepackage{calc} -\urlstyle{rm}% -\providecommand{\centerurl}[1]{\begin{center}\url{#1}\end{center}} +\urlstyle{tt} % \providecommand{\note}[1]{\color{red}**#1**}% @@ -31,6 +30,7 @@ % \providecommand{\key}[1]{\textbf{#1}}% \providecommand{\code}[1]{\texttt{#1}}% +\providecommand{\codestr}[1]{`\texttt{#1}'}% \providecommand{\var}[1]{\texttt{#1}}% \providecommand{\command}[1]{\texttt{#1}} @@ -82,7 +82,7 @@ \title{Configuring and extending Ion3 with Lua} \author{Tuomo Valkonen \\tuomov at iki.fi} -\date{2007-03-18} +\date{2007-05-06} \makeindex @@ -231,7 +231,7 @@ \stepcounter{section} \stepcounter{section} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline1041}% +\lthtmlinlinemathA{tex2html_wrap_inline1055}% $n$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} @@ -242,7 +242,7 @@ $n$% \stepcounter{subsection} \stepcounter{subsection} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline1045}% +\lthtmlinlinemathA{tex2html_wrap_inline1059}% $N=1{\ldots} 5$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} @@ -275,6 +275,12 @@ $N=1{\ldots} 5$% \stepcounter{subsection} \stepcounter{subsubsection} \stepcounter{subsubsection} +\stepcounter{section} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsection} +\stepcounter{subsubsection} +\stepcounter{subsubsection} \stepcounter{subsubsection} \stepcounter{chapter} \stepcounter{section} @@ -293,8 +299,9 @@ $N=1{\ldots} 5$% \stepcounter{subsection} \stepcounter{section} \stepcounter{subsection} +\stepcounter{subsection} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline2020}% +\lthtmlinlinemathA{tex2html_wrap_inline2241}% $(0, 1]$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} @@ -316,14 +323,15 @@ $(0, 1]$% \stepcounter{subsection} \stepcounter{subsection} \stepcounter{subsection} +\stepcounter{subsection} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline6387}% +\lthtmlinlinemathA{tex2html_wrap_inline5502}% $-1$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline6389}% +\lthtmlinlinemathA{tex2html_wrap_inline5504}% $-2$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} @@ -337,6 +345,7 @@ $-2$% \stepcounter{subsection} \stepcounter{subsection} \stepcounter{subsection} +\stepcounter{subsection} \stepcounter{section} \stepcounter{subsection} \stepcounter{subsection} @@ -352,7 +361,7 @@ $-2$% \stepcounter{section} \stepcounter{subsection} {\newpage\clearpage -\lthtmlinlinemathA{tex2html_wrap_inline9409}% +\lthtmlinlinemathA{tex2html_wrap_inline7754}% $\{t,m,b\}\times\{t,c,b\}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} @@ -362,6 +371,8 @@ $\{t,m,b\}\times\{t,c,b\}$% \stepcounter{subsection} \stepcounter{section} \stepcounter{section} +\stepcounter{section} +\stepcounter{subsection} \appendix \stepcounter{chapter} \addtocounter{enumi}{-1} diff --git a/doc/ionconf/img1.png b/doc/ionconf/img1.png index e69de29..9d458d5 100644 Binary files a/doc/ionconf/img1.png and b/doc/ionconf/img1.png differ diff --git a/doc/ionconf/img2.png b/doc/ionconf/img2.png index e69de29..d681364 100644 Binary files a/doc/ionconf/img2.png and b/doc/ionconf/img2.png differ diff --git a/doc/ionconf/img3.png b/doc/ionconf/img3.png index e69de29..38071fe 100644 Binary files a/doc/ionconf/img3.png and b/doc/ionconf/img3.png differ diff --git a/doc/ionconf/img4.png b/doc/ionconf/img4.png index e69de29..3d3a3ef 100644 Binary files a/doc/ionconf/img4.png and b/doc/ionconf/img4.png differ diff --git a/doc/ionconf/img5.png b/doc/ionconf/img5.png index e69de29..38fbe56 100644 Binary files a/doc/ionconf/img5.png and b/doc/ionconf/img5.png differ diff --git a/doc/ionconf/img6.png b/doc/ionconf/img6.png index e69de29..3601ccb 100644 Binary files a/doc/ionconf/img6.png and b/doc/ionconf/img6.png differ diff --git a/doc/ionconf/index.html b/doc/ionconf/index.html index a2f4405..4783107 100644 --- a/doc/ionconf/index.html +++ b/doc/ionconf/index.html @@ -25,27 +25,27 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -57,13 +57,13 @@ original version by: Nikos Drakos, CBLU, University of Leeds

Tuomo Valkonen

tuomov at iki.fi

-

2007-03-18

+

2007-05-06

Configuring and extending Ion3 with Lua
-Copyright © 2003-2005 Tuomo Valkonen. +Copyright © 2003-2007 Tuomo Valkonen.

This document is free; you can redistribute it and/or modify @@ -75,7 +75,7 @@ the Free Software Foundation; either version 2 of the License, or This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -chapter entitled ''GNU General Public License'' for more details. +chapter entitled ``GNU General Public License'' for more details.



@@ -83,264 +83,294 @@ chapter entitled ''GNU General Public License'' for more details.
-
  • A. The GNU General Public License
    -
  • B. Full class hierarchy visible to Lua-side -
  • List of functions -
  • Index -
  • About this document ... +
  • Bibliography +
  • About this document ...

    diff --git a/doc/ionconf/internals.pl b/doc/ionconf/internals.pl index 0c3453a..e2b61be 100644 --- a/doc/ionconf/internals.pl +++ b/doc/ionconf/internals.pl @@ -18,6 +18,10 @@ $key = q/fn:gr.select_engine/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WHook.add/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.x_get_window_property/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -26,6 +30,14 @@ $key = q/fn:WEdln.context/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.get_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.tabnum.clear/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:mod_query.query_exec/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -34,11 +46,11 @@ $key = q/fn:ioncore.goto_first/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.insstr/; +$key = q/fn:WClientWin.quote_next/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WClientWin.quote_next/; +$key = q/fn:WEdln.insstr/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -50,11 +62,19 @@ $key = q/fn:WFrame.is_shaded/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/sec:sizepolicies/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTimer.set/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.goto_activity/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.farthest/; +$key = q/fn:ioncore.submap_enter/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -62,11 +82,11 @@ $key = q/fn:ioncore.create_ws/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.finish/; +$key = q/fn:WTiling.farthest/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.mark/; +$key = q/fn:WEdln.finish/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -74,6 +94,10 @@ $key = q/fn:WEdln.bskip_word/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WEdln.mark/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMPlex.switch_prev/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -106,19 +130,19 @@ $key = q/fn:ioncore.kpress/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.is_mapped/; +$key = q/fn:ioncore.goto_prev_screen/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.goto_prev_screen/; +$key = q/fn:WRegion.is_mapped/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.transpose_words/; +$key = q/sec:ioncoreref/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/sec:ioncoreref/; +$key = q/fn:WEdln.transpose_words/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -146,6 +170,10 @@ $key = q/fn:ioncore.shutdown/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:mod_statusbar.launch_statusd/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.getbindings/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -166,6 +194,10 @@ $key = q/fn:ioncore.defmenu/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WTimer.reset/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fig:borders/; $ref_files{$key} = "$dir".q|node5.html|; $noresave{$key} = "$nosave"; @@ -198,8 +230,8 @@ $key = q/fn:WMoveresMode.resize/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WStatusBar.is_systray_extl/; -$ref_files{$key} = "$dir".q|node7.html|; +$key = q/sec:statusbar/; +$ref_files{$key} = "$dir".q|node4.html|; $noresave{$key} = "$nosave"; $key = q/fn:WMenu.select_nth/; @@ -214,6 +246,10 @@ $key = q/fn:ioncore.warn_traced/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.create_timer/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WTiling.managed_i/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -226,7 +262,7 @@ $key = q/sec:modules/; $ref_files{$key} = "$dir".q|node3.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplitSplit.tl/; +$key = q/fn:ioncore.defctxmenu/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -234,7 +270,7 @@ $key = q/fn:mod_tiling.mkbottom/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.defctxmenu/; +$key = q/fn:WSplitSplit.tl/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -246,11 +282,11 @@ $key = q/fn:WInput.scrollup/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.set_name_exact/; +$key = q/fn:WMPlex.switch_nth/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.switch_nth/; +$key = q/fn:WRegion.set_name_exact/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -266,6 +302,10 @@ $key = q/fn:ioncore.menuentry/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WFrame.set_grattr/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WEdln.forward/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -298,6 +338,10 @@ $key = q/fn:ioncore.snapshot/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.tabnum.show/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/region_do_warp_alt/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -314,6 +358,10 @@ $key = q/fn:ioncore.write_savefile/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:mod_statusbar.inform/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.tagged_i/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -378,6 +426,10 @@ $key = q/fn:WFrame.p_tabdrag/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/cite_scripts/; +$ref_files{$key} = "$dir".q|node12.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.clientwin_i/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -394,11 +446,11 @@ $key = q/fn:WMPlex.switch_next/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.unsqueeze/; +$key = q/fn:WGroup.bottom/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WGroup.bottom/; +$key = q/fn:ioncore.unsqueeze/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -462,15 +514,15 @@ $key = q/chap:tricks/; $ref_files{$key} = "$dir".q|node6.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.groupleader_of/; +$key = q/fn:ioncore.get_savefile/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.get_savefile/; +$key = q/fn:WRegion.groupleader_of/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:mod_query.history_push/; +$key = q/fn:ioncore.lookup_clientwin/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -478,7 +530,7 @@ $key = q/fn:mod_query.get/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.lookup_clientwin/; +$key = q/fn:mod_query.history_push/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -494,11 +546,11 @@ $key = q/sec:winprops/; $ref_files{$key} = "$dir".q|node4.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplit.parent/; +$key = q/fn:ioncore.getctxmenu/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.getctxmenu/; +$key = q/fn:WSplit.parent/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -546,6 +598,10 @@ $key = q/fn:WEdln.point/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.defer/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMenu.select_prev/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -642,6 +698,10 @@ $key = q/fn:ioncore.defshortening/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WHook.listed/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.refresh_stylelist/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -718,11 +778,11 @@ $key = q/fn:WSplitSplit.br/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:string.shell_safe/; +$key = q/fn:mod_query.query_restart/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:mod_query.query_restart/; +$key = q/fn:string.shell_safe/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -786,14 +846,14 @@ $key = q/fn:WRegion.begin_kbresize/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.deflayout/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/sec:classesrolesinstances/; $ref_files{$key} = "$dir".q|node4.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.deflayout/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.tagged_attach/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -838,6 +898,10 @@ $key = q/fn:ioncore.detach/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/sec:miscref/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WClientWin.xid/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -910,6 +974,10 @@ $key = q/fn:ioncore.find_manager/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.match_winprop_dflt/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.get_paths/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -922,7 +990,7 @@ $key = q/sec:walkthrough/; $ref_files{$key} = "$dir".q|node4.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WFrame.set_numbers/; +$key = q/fn:mod_statusbar.update/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -946,6 +1014,10 @@ $key = q/fn:WMPlex.attach_new/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:mod_statusbar.create/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WGroup.attach/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -954,11 +1026,11 @@ $key = q/fn:ioncore.mdblclick/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplitSplit.flip/; +$key = q/fn:WTiling.split_top/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.split_top/; +$key = q/fn:WSplitSplit.flip/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -970,11 +1042,11 @@ $key = q/fn:mod_query.popen_completions/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.defwinprop/; +$key = q/fn:ioncore.popen_bgread/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.popen_bgread/; +$key = q/fn:ioncore.defwinprop/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -986,11 +1058,15 @@ $key = q/fn:ioncore.mdrag/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WSplit.transpose/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WClientWin.kill/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplit.transpose/; +$key = q/fn:ioncore.submap_wait/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -998,11 +1074,15 @@ $key = q/ioncore_snapshot_hook/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WSplitSplit.dir/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:table.map/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplitSplit.dir/; +$key = q/fn:WMPlex.set_stdisp/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1010,7 +1090,7 @@ $key = q/fn:WFrame.set_shaded/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.set_stdisp/; +$key = q/fn:WStatusBar.is_systray/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1022,11 +1102,11 @@ $key = q/fn:ioncore.x_change_property/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WInput.cancel/; +$key = q/fn:WRegion.parent/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.parent/; +$key = q/fn:WInput.cancel/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1074,10 +1154,6 @@ $key = q/clientwin_do_manage_alt/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.match_winprop_name/; -$ref_files{$key} = "$dir".q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/ioncore_sigchld_hook/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1142,6 +1218,10 @@ $key = q/fn:ioncore.getwinprop/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WHook.remove/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.request_selection/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1174,6 +1254,10 @@ $key = q/fn:ioncore.aboutmsg/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/sec:grmisc/; +$ref_files{$key} = "$dir".q|node5.html|; +$noresave{$key} = "$nosave"; + $key = q/chap:prelim/; $ref_files{$key} = "$dir".q|node3.html|; $noresave{$key} = "$nosave"; @@ -1202,6 +1286,10 @@ $key = q/fn:WRegion.is_activity/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/sec:statusd/; +$ref_files{$key} = "$dir".q|node6.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WRegion.rqgeom/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1238,6 +1326,10 @@ $key = q/sec:tilingref/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WTimer.is_set/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WRegion.set_name/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; @@ -1346,6 +1438,10 @@ $key = q/fn:WEdln.skip_word/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/ioncore_submap_ungrab_hook/; +$ref_files{$key} = "$dir".q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WGroup.attach_new/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; diff --git a/doc/ionconf/ionconf.css b/doc/ionconf/ionconf.css index f0cd026..86d99dc 100644 --- a/doc/ionconf/ionconf.css +++ b/doc/ionconf/ionconf.css @@ -29,6 +29,7 @@ TD.eqno { } /* equation-number cells */ /* document-specific styles come next */ DIV.navigation { } +DIV.flushleft { } DIV.center { } SPAN.sc { } DIV.quote { } diff --git a/doc/ionconf/ionconf.html b/doc/ionconf/ionconf.html index a2f4405..4783107 100644 --- a/doc/ionconf/ionconf.html +++ b/doc/ionconf/ionconf.html @@ -25,27 +25,27 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -57,13 +57,13 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    Tuomo Valkonen

    tuomov at iki.fi

    -

    2007-03-18

    +

    2007-05-06

    Configuring and extending Ion3 with Lua
    -Copyright © 2003-2005 Tuomo Valkonen. +Copyright © 2003-2007 Tuomo Valkonen.

    This document is free; you can redistribute it and/or modify @@ -75,7 +75,7 @@ the Free Software Foundation; either version 2 of the License, or This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -chapter entitled ''GNU General Public License'' for more details. +chapter entitled ``GNU General Public License'' for more details.



    @@ -83,264 +83,294 @@ chapter entitled ''GNU General Public License'' for more details.
    -
  • A. The GNU General Public License
    -
  • B. Full class hierarchy visible to Lua-side -
  • List of functions -
  • Index -
  • About this document ... +
  • Bibliography +
  • About this document ...

    diff --git a/doc/ionconf/labels.pl b/doc/ionconf/labels.pl index a14d1d0..54a83c4 100644 --- a/doc/ionconf/labels.pl +++ b/doc/ionconf/labels.pl @@ -18,6 +18,10 @@ $key = q/fn:gr.select_engine/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WHook.add/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.x_get_window_property/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -26,6 +30,14 @@ $key = q/fn:WEdln.context/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.get_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.tabnum.clear/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:mod_query.query_exec/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -34,11 +46,11 @@ $key = q/fn:ioncore.goto_first/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.insstr/; +$key = q/fn:WClientWin.quote_next/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WClientWin.quote_next/; +$key = q/fn:WEdln.insstr/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -50,11 +62,19 @@ $key = q/fn:WFrame.is_shaded/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/sec:sizepolicies/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTimer.set/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.goto_activity/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.farthest/; +$key = q/fn:ioncore.submap_enter/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -62,11 +82,11 @@ $key = q/fn:ioncore.create_ws/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.finish/; +$key = q/fn:WTiling.farthest/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.mark/; +$key = q/fn:WEdln.finish/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -74,6 +94,10 @@ $key = q/fn:WEdln.bskip_word/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WEdln.mark/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMPlex.switch_prev/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -106,19 +130,19 @@ $key = q/fn:ioncore.kpress/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.is_mapped/; +$key = q/fn:ioncore.goto_prev_screen/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.goto_prev_screen/; +$key = q/fn:WRegion.is_mapped/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.transpose_words/; +$key = q/sec:ioncoreref/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/sec:ioncoreref/; +$key = q/fn:WEdln.transpose_words/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -146,6 +170,10 @@ $key = q/fn:ioncore.shutdown/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:mod_statusbar.launch_statusd/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.getbindings/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -166,6 +194,10 @@ $key = q/fn:ioncore.defmenu/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WTimer.reset/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fig:borders/; $external_labels{$key} = "$URL/" . q|node5.html|; $noresave{$key} = "$nosave"; @@ -198,8 +230,8 @@ $key = q/fn:WMoveresMode.resize/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WStatusBar.is_systray_extl/; -$external_labels{$key} = "$URL/" . q|node7.html|; +$key = q/sec:statusbar/; +$external_labels{$key} = "$URL/" . q|node4.html|; $noresave{$key} = "$nosave"; $key = q/fn:WMenu.select_nth/; @@ -214,6 +246,10 @@ $key = q/fn:ioncore.warn_traced/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.create_timer/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WTiling.managed_i/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -226,7 +262,7 @@ $key = q/sec:modules/; $external_labels{$key} = "$URL/" . q|node3.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplitSplit.tl/; +$key = q/fn:ioncore.defctxmenu/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -234,7 +270,7 @@ $key = q/fn:mod_tiling.mkbottom/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.defctxmenu/; +$key = q/fn:WSplitSplit.tl/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -246,11 +282,11 @@ $key = q/fn:WInput.scrollup/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.set_name_exact/; +$key = q/fn:WMPlex.switch_nth/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.switch_nth/; +$key = q/fn:WRegion.set_name_exact/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -266,6 +302,10 @@ $key = q/fn:ioncore.menuentry/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WFrame.set_grattr/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WEdln.forward/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -298,6 +338,10 @@ $key = q/fn:ioncore.snapshot/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.tabnum.show/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/region_do_warp_alt/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -314,6 +358,10 @@ $key = q/fn:ioncore.write_savefile/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:mod_statusbar.inform/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.tagged_i/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -378,6 +426,10 @@ $key = q/fn:WFrame.p_tabdrag/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/cite_scripts/; +$external_labels{$key} = "$URL/" . q|node12.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.clientwin_i/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -394,11 +446,11 @@ $key = q/fn:WMPlex.switch_next/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.unsqueeze/; +$key = q/fn:WGroup.bottom/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WGroup.bottom/; +$key = q/fn:ioncore.unsqueeze/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -462,15 +514,15 @@ $key = q/chap:tricks/; $external_labels{$key} = "$URL/" . q|node6.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.groupleader_of/; +$key = q/fn:ioncore.get_savefile/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.get_savefile/; +$key = q/fn:WRegion.groupleader_of/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:mod_query.history_push/; +$key = q/fn:ioncore.lookup_clientwin/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -478,7 +530,7 @@ $key = q/fn:mod_query.get/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.lookup_clientwin/; +$key = q/fn:mod_query.history_push/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -494,11 +546,11 @@ $key = q/sec:winprops/; $external_labels{$key} = "$URL/" . q|node4.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplit.parent/; +$key = q/fn:ioncore.getctxmenu/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.getctxmenu/; +$key = q/fn:WSplit.parent/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -546,6 +598,10 @@ $key = q/fn:WEdln.point/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.defer/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMenu.select_prev/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -642,6 +698,10 @@ $key = q/fn:ioncore.defshortening/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WHook.listed/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.refresh_stylelist/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -718,11 +778,11 @@ $key = q/fn:WSplitSplit.br/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:string.shell_safe/; +$key = q/fn:mod_query.query_restart/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:mod_query.query_restart/; +$key = q/fn:string.shell_safe/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -786,14 +846,14 @@ $key = q/fn:WRegion.begin_kbresize/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.deflayout/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/sec:classesrolesinstances/; $external_labels{$key} = "$URL/" . q|node4.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.deflayout/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.tagged_attach/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -838,6 +898,10 @@ $key = q/fn:ioncore.detach/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/sec:miscref/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WClientWin.xid/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -910,6 +974,10 @@ $key = q/fn:ioncore.find_manager/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.match_winprop_dflt/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.get_paths/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -922,7 +990,7 @@ $key = q/sec:walkthrough/; $external_labels{$key} = "$URL/" . q|node4.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WFrame.set_numbers/; +$key = q/fn:mod_statusbar.update/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -946,6 +1014,10 @@ $key = q/fn:WMPlex.attach_new/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:mod_statusbar.create/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WGroup.attach/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -954,11 +1026,11 @@ $key = q/fn:ioncore.mdblclick/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplitSplit.flip/; +$key = q/fn:WTiling.split_top/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.split_top/; +$key = q/fn:WSplitSplit.flip/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -970,11 +1042,11 @@ $key = q/fn:mod_query.popen_completions/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.defwinprop/; +$key = q/fn:ioncore.popen_bgread/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.popen_bgread/; +$key = q/fn:ioncore.defwinprop/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -986,11 +1058,15 @@ $key = q/fn:ioncore.mdrag/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WSplit.transpose/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WClientWin.kill/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplit.transpose/; +$key = q/fn:ioncore.submap_wait/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -998,11 +1074,15 @@ $key = q/ioncore_snapshot_hook/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WSplitSplit.dir/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:table.map/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplitSplit.dir/; +$key = q/fn:WMPlex.set_stdisp/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1010,7 +1090,7 @@ $key = q/fn:WFrame.set_shaded/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.set_stdisp/; +$key = q/fn:WStatusBar.is_systray/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1022,11 +1102,11 @@ $key = q/fn:ioncore.x_change_property/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WInput.cancel/; +$key = q/fn:WRegion.parent/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.parent/; +$key = q/fn:WInput.cancel/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1074,10 +1154,6 @@ $key = q/clientwin_do_manage_alt/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.match_winprop_name/; -$external_labels{$key} = "$URL/" . q|node7.html|; -$noresave{$key} = "$nosave"; - $key = q/ioncore_sigchld_hook/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1142,6 +1218,10 @@ $key = q/fn:ioncore.getwinprop/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WHook.remove/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.request_selection/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1174,6 +1254,10 @@ $key = q/fn:ioncore.aboutmsg/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/sec:grmisc/; +$external_labels{$key} = "$URL/" . q|node5.html|; +$noresave{$key} = "$nosave"; + $key = q/chap:prelim/; $external_labels{$key} = "$URL/" . q|node3.html|; $noresave{$key} = "$nosave"; @@ -1202,6 +1286,10 @@ $key = q/fn:WRegion.is_activity/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/sec:statusd/; +$external_labels{$key} = "$URL/" . q|node6.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WRegion.rqgeom/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1238,6 +1326,10 @@ $key = q/sec:tilingref/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/fn:WTimer.is_set/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WRegion.set_name/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1346,6 +1438,10 @@ $key = q/fn:WEdln.skip_word/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; +$key = q/ioncore_submap_ungrab_hook/; +$external_labels{$key} = "$URL/" . q|node7.html|; +$noresave{$key} = "$nosave"; + $key = q/fn:WGroup.attach_new/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; @@ -1378,11 +1474,15 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.mx_nth/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:gr.select_engine/; -$external_latex_labels{$key} = q|6.1.14|; +$external_latex_labels{$key} = q|6.1.16|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WHook.add/; +$external_latex_labels{$key} = q|6.1.6|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.x_get_window_property/; @@ -1393,6 +1493,14 @@ $key = q/fn:WEdln.context/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.get_hook/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:ioncore.tabnum.clear/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:mod_query.query_exec/; $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; @@ -1401,14 +1509,14 @@ $key = q/fn:ioncore.goto_first/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.insstr/; -$external_latex_labels{$key} = q|6.3.2|; -$noresave{$key} = "$nosave"; - $key = q/fn:WClientWin.quote_next/; $external_latex_labels{$key} = q|6.1.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WEdln.insstr/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + $key = q/fn:mod_query.query_renameworkspace/; $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; @@ -1417,32 +1525,44 @@ $key = q/fn:WFrame.is_shaded/; $external_latex_labels{$key} = q|6.1.2|; $noresave{$key} = "$nosave"; +$key = q/sec:sizepolicies/; +$external_latex_labels{$key} = q|6.10.1|; +$noresave{$key} = "$nosave"; + +$key = q/fn:WTimer.set/; +$external_latex_labels{$key} = q|6.1.13|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.goto_activity/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:WTiling.farthest/; -$external_latex_labels{$key} = q|6.2.5|; +$key = q/fn:ioncore.submap_enter/; +$external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.create_ws/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WTiling.farthest/; +$external_latex_labels{$key} = q|6.2.5|; +$noresave{$key} = "$nosave"; + $key = q/fn:WEdln.finish/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.mark/; +$key = q/fn:WEdln.bskip_word/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.bskip_word/; +$key = q/fn:WEdln.mark/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.switch_prev/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:WTiling.unsplit_at/; @@ -1450,7 +1570,7 @@ $external_latex_labels{$key} = q|6.2.5|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.dec_index/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.current/; @@ -1473,22 +1593,22 @@ $key = q/fn:ioncore.kpress/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.is_mapped/; -$external_latex_labels{$key} = q|6.1.9|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.goto_prev_screen/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:WEdln.transpose_words/; -$external_latex_labels{$key} = q|6.3.2|; +$key = q/fn:WRegion.is_mapped/; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/sec:ioncoreref/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WEdln.transpose_words/; +$external_latex_labels{$key} = q|6.3.2|; +$noresave{$key} = "$nosave"; + $key = q/fn:mod_statusbar.statusbars/; $external_latex_labels{$key} = q|6.7|; $noresave{$key} = "$nosave"; @@ -1502,7 +1622,7 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WWindow.p_resize/; -$external_latex_labels{$key} = q|6.1.12|; +$external_latex_labels{$key} = q|6.1.14|; $noresave{$key} = "$nosave"; $key = q/fn:WComplProxy.set_completions/; @@ -1513,6 +1633,10 @@ $key = q/fn:ioncore.shutdown/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:mod_statusbar.launch_statusd/; +$external_latex_labels{$key} = q|6.7|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.getbindings/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -1526,13 +1650,17 @@ $external_latex_labels{$key} = q|4.1.1|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.get_stdisp/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.defmenu/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WTimer.reset/; +$external_latex_labels{$key} = q|6.1.13|; +$noresave{$key} = "$nosave"; + $key = q/fig:borders/; $external_latex_labels{$key} = q|4.1|; $noresave{$key} = "$nosave"; @@ -1554,7 +1682,7 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WScreen.id/; -$external_latex_labels{$key} = q|6.1.11|; +$external_latex_labels{$key} = q|6.1.12|; $noresave{$key} = "$nosave"; $key = q/fn:WFrame.set_mode/; @@ -1562,11 +1690,11 @@ $external_latex_labels{$key} = q|6.1.2|; $noresave{$key} = "$nosave"; $key = q/fn:WMoveresMode.resize/; -$external_latex_labels{$key} = q|6.1.8|; +$external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; -$key = q/fn:WStatusBar.is_systray_extl/; -$external_latex_labels{$key} = q|6.7.1|; +$key = q/sec:statusbar/; +$external_latex_labels{$key} = q|3.6|; $noresave{$key} = "$nosave"; $key = q/fn:WMenu.select_nth/; @@ -1581,6 +1709,10 @@ $key = q/fn:ioncore.warn_traced/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.create_timer/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:WTiling.managed_i/; $external_latex_labels{$key} = q|6.2.5|; $noresave{$key} = "$nosave"; @@ -1593,16 +1725,16 @@ $key = q/sec:modules/; $external_latex_labels{$key} = q|2.1|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplitSplit.tl/; -$external_latex_labels{$key} = q|6.2.4|; +$key = q/fn:ioncore.defctxmenu/; +$external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:mod_tiling.mkbottom/; $external_latex_labels{$key} = q|6.2|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.defctxmenu/; -$external_latex_labels{$key} = q|6.1|; +$key = q/fn:WSplitSplit.tl/; +$external_latex_labels{$key} = q|6.2.4|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.set_selection/; @@ -1613,12 +1745,12 @@ $key = q/fn:WInput.scrollup/; $external_latex_labels{$key} = q|6.3.3|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.set_name_exact/; -$external_latex_labels{$key} = q|6.1.9|; +$key = q/fn:WMPlex.switch_nth/; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.switch_nth/; -$external_latex_labels{$key} = q|6.1.7|; +$key = q/fn:WRegion.set_name_exact/; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:WEdln.prev_completion/; @@ -1633,6 +1765,10 @@ $key = q/fn:ioncore.menuentry/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WFrame.set_grattr/; +$external_latex_labels{$key} = q|6.1.2|; +$noresave{$key} = "$nosave"; + $key = q/fn:WEdln.forward/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; @@ -1658,13 +1794,17 @@ $external_latex_labels{$key} = q|3.3|; $noresave{$key} = "$nosave"; $key = q/fn:WInfoWin.set_text/; -$external_latex_labels{$key} = q|6.1.6|; +$external_latex_labels{$key} = q|6.1.7|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.snapshot/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.tabnum.show/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/region_do_warp_alt/; $external_latex_labels{$key} = q|6.9|; $noresave{$key} = "$nosave"; @@ -1681,6 +1821,10 @@ $key = q/fn:ioncore.write_savefile/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:mod_statusbar.inform/; +$external_latex_labels{$key} = q|6.7|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.tagged_i/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -1694,7 +1838,7 @@ $external_latex_labels{$key} = q|5.1|; $noresave{$key} = "$nosave"; $key = q/fn:WWindow.xid/; -$external_latex_labels{$key} = q|6.1.12|; +$external_latex_labels{$key} = q|6.1.14|; $noresave{$key} = "$nosave"; $key = q/sec:statusbarref/; @@ -1734,7 +1878,7 @@ $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; $key = q/fn:gr.read_config/; -$external_latex_labels{$key} = q|6.1.14|; +$external_latex_labels{$key} = q|6.1.16|; $noresave{$key} = "$nosave"; $key = q/fn:WTiling.split_at/; @@ -1754,21 +1898,21 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.screen_of/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.switch_next/; -$external_latex_labels{$key} = q|6.1.7|; -$noresave{$key} = "$nosave"; - -$key = q/fn:ioncore.unsqueeze/; -$external_latex_labels{$key} = q|6.1|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:WGroup.bottom/; $external_latex_labels{$key} = q|6.1.3|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.unsqueeze/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:mod_query.history_search/; $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; @@ -1778,7 +1922,7 @@ $external_latex_labels{$key} = q|6.2.5|; $noresave{$key} = "$nosave"; $key = q/fn:WRootWin.current_scr/; -$external_latex_labels{$key} = q|6.1.10|; +$external_latex_labels{$key} = q|6.1.11|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.navi_first/; @@ -1814,7 +1958,7 @@ $external_latex_labels{$key} = q|6.5.1|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.set_tagged/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/app:fullhierarchy/; @@ -1830,23 +1974,23 @@ $external_latex_labels{$key} = q|5|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.groupleader_of/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.get_savefile/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:mod_query.history_push/; -$external_latex_labels{$key} = q|6.3|; +$key = q/fn:ioncore.lookup_clientwin/; +$external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:mod_query.get/; $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.lookup_clientwin/; -$external_latex_labels{$key} = q|6.1|; +$key = q/fn:mod_query.history_push/; +$external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.restart/; @@ -1861,16 +2005,16 @@ $key = q/sec:winprops/; $external_latex_labels{$key} = q|3.5|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplit.parent/; -$external_latex_labels{$key} = q|6.2.1|; -$noresave{$key} = "$nosave"; - $key = q/fn:ioncore.getctxmenu/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WSplit.parent/; +$external_latex_labels{$key} = q|6.2.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMoveresMode.rqgeom/; -$external_latex_labels{$key} = q|6.1.8|; +$external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; $key = q/fn:WStatusBar.get_template_table/; @@ -1890,7 +2034,7 @@ $external_latex_labels{$key} = q|6.1.3|; $noresave{$key} = "$nosave"; $key = q/fn:WWindow.p_move/; -$external_latex_labels{$key} = q|6.1.12|; +$external_latex_labels{$key} = q|6.1.14|; $noresave{$key} = "$nosave"; $key = q/sec:objects/; @@ -1898,7 +2042,7 @@ $external_latex_labels{$key} = q|2.2|; $noresave{$key} = "$nosave"; $key = q/fn:WScreen.set_managed_offset/; -$external_latex_labels{$key} = q|6.1.11|; +$external_latex_labels{$key} = q|6.1.12|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.get_dir_for/; @@ -1913,6 +2057,10 @@ $key = q/fn:WEdln.point/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.defer/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:WMenu.select_prev/; $external_latex_labels{$key} = q|6.4.1|; $noresave{$key} = "$nosave"; @@ -1954,7 +2102,7 @@ $external_latex_labels{$key} = q|6.4.1|; $noresave{$key} = "$nosave"; $key = q/fn:table.copy/; -$external_latex_labels{$key} = q|6.1.16|; +$external_latex_labels{$key} = q|6.1.18|; $noresave{$key} = "$nosave"; $key = q/fn:WSplit.rqgeom/; @@ -1962,7 +2110,7 @@ $external_latex_labels{$key} = q|6.2.1|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.managed_i/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:WEdln.set_mark/; @@ -1974,11 +2122,11 @@ $external_latex_labels{$key} = q|6.9|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.mx_count/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.attach/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fig:managership/; @@ -1990,7 +2138,7 @@ $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; $key = q/fn:WMoveresMode.move/; -$external_latex_labels{$key} = q|6.1.8|; +$external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; $key = q/fn:mod_tiling.get/; @@ -2009,6 +2157,10 @@ $key = q/fn:ioncore.defshortening/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WHook.listed/; +$external_latex_labels{$key} = q|6.1.6|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.refresh_stylelist/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -2018,7 +2170,7 @@ $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.inc_index/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.x_delete_property/; @@ -2026,11 +2178,11 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.rqclose/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.set_activity/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:mod_query.query_runfile/; @@ -2054,7 +2206,7 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.mx_current/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:mod_query.message/; @@ -2085,14 +2237,14 @@ $key = q/fn:WSplitSplit.br/; $external_latex_labels{$key} = q|6.2.4|; $noresave{$key} = "$nosave"; -$key = q/fn:string.shell_safe/; -$external_latex_labels{$key} = q|6.1.15|; -$noresave{$key} = "$nosave"; - $key = q/fn:mod_query.query_restart/; $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; +$key = q/fn:string.shell_safe/; +$external_latex_labels{$key} = q|6.1.17|; +$noresave{$key} = "$nosave"; + $key = q/fn:mod_tiling.set/; $external_latex_labels{$key} = q|6.2|; $noresave{$key} = "$nosave"; @@ -2122,11 +2274,11 @@ $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.current/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.rqclose_propagate/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/region_notify_hook/; @@ -2150,23 +2302,23 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.begin_kbresize/; -$external_latex_labels{$key} = q|6.1.9|; -$noresave{$key} = "$nosave"; - -$key = q/fn:ioncore.deflayout/; -$external_latex_labels{$key} = q|6.1|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/sec:classesrolesinstances/; $external_latex_labels{$key} = q|3.5.2|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.deflayout/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.tagged_attach/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.is_tagged/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:WEdln.next_completion/; @@ -2174,7 +2326,7 @@ $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.set_hidden/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:WMenu.cancel/; @@ -2186,7 +2338,7 @@ $external_latex_labels{$key} = q|6.1.1|; $noresave{$key} = "$nosave"; $key = q/fn:WMoveresMode.geom/; -$external_latex_labels{$key} = q|6.1.8|; +$external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.goto_nth_screen/; @@ -2205,12 +2357,16 @@ $key = q/fn:ioncore.detach/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/sec:miscref/; +$external_latex_labels{$key} = q|6.10|; +$noresave{$key} = "$nosave"; + $key = q/fn:WClientWin.xid/; $external_latex_labels{$key} = q|6.1.1|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.name/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.x_get_text_property/; @@ -2226,7 +2382,7 @@ $external_latex_labels{$key} = q|6.9|; $noresave{$key} = "$nosave"; $key = q/fn:table.append/; -$external_latex_labels{$key} = q|6.1.16|; +$external_latex_labels{$key} = q|6.1.18|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.mclick/; @@ -2238,7 +2394,7 @@ $external_latex_labels{$key} = q|6.7.1|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.set_index/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:mod_query.history_clear/; @@ -2254,7 +2410,7 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WMoveresMode.finish/; -$external_latex_labels{$key} = q|6.1.8|; +$external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; $key = q/fn:mod_query.query_gotoclient/; @@ -2277,6 +2433,10 @@ $key = q/fn:ioncore.find_manager/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:ioncore.match_winprop_dflt/; +$external_latex_labels{$key} = q|6.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.get_paths/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -2289,12 +2449,12 @@ $key = q/sec:walkthrough/; $external_latex_labels{$key} = q|3.2|; $noresave{$key} = "$nosave"; -$key = q/fn:WFrame.set_numbers/; -$external_latex_labels{$key} = q|6.1.2|; +$key = q/fn:mod_statusbar.update/; +$external_latex_labels{$key} = q|6.7|; $noresave{$key} = "$nosave"; $key = q/fn:WMoveresMode.cancel/; -$external_latex_labels{$key} = q|6.1.8|; +$external_latex_labels{$key} = q|6.1.9|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.submap/; @@ -2302,7 +2462,7 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.is_active/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:WEdln.bkill_word/; @@ -2310,7 +2470,11 @@ $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.attach_new/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; +$noresave{$key} = "$nosave"; + +$key = q/fn:mod_statusbar.create/; +$external_latex_labels{$key} = q|6.7|; $noresave{$key} = "$nosave"; $key = q/fn:WGroup.attach/; @@ -2337,11 +2501,11 @@ $key = q/fn:mod_query.popen_completions/; $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.defwinprop/; +$key = q/fn:ioncore.popen_bgread/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.popen_bgread/; +$key = q/fn:ioncore.defwinprop/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -2353,48 +2517,56 @@ $key = q/fn:ioncore.mdrag/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WSplit.transpose/; +$external_latex_labels{$key} = q|6.2.1|; +$noresave{$key} = "$nosave"; + $key = q/fn:WClientWin.kill/; $external_latex_labels{$key} = q|6.1.1|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplit.transpose/; -$external_latex_labels{$key} = q|6.2.1|; +$key = q/fn:ioncore.submap_wait/; +$external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/ioncore_snapshot_hook/; $external_latex_labels{$key} = q|6.9|; $noresave{$key} = "$nosave"; +$key = q/fn:WSplitSplit.dir/; +$external_latex_labels{$key} = q|6.2.4|; +$noresave{$key} = "$nosave"; + $key = q/fn:table.map/; -$external_latex_labels{$key} = q|6.1.16|; +$external_latex_labels{$key} = q|6.1.18|; $noresave{$key} = "$nosave"; -$key = q/fn:WSplitSplit.dir/; -$external_latex_labels{$key} = q|6.2.4|; +$key = q/fn:WMPlex.set_stdisp/; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:WFrame.set_shaded/; $external_latex_labels{$key} = q|6.1.2|; $noresave{$key} = "$nosave"; -$key = q/fn:WMPlex.set_stdisp/; -$external_latex_labels{$key} = q|6.1.7|; +$key = q/fn:WStatusBar.is_systray/; +$external_latex_labels{$key} = q|6.7.1|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.manager/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.x_change_property/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; -$key = q/fn:WInput.cancel/; -$external_latex_labels{$key} = q|6.3.3|; +$key = q/fn:WRegion.parent/; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; -$key = q/fn:WRegion.parent/; -$external_latex_labels{$key} = q|6.1.9|; +$key = q/fn:WInput.cancel/; +$external_latex_labels{$key} = q|6.3.3|; $noresave{$key} = "$nosave"; $key = q/fn:WEdln.back/; @@ -2418,7 +2590,7 @@ $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.geom/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.kpress_wait/; @@ -2430,21 +2602,17 @@ $external_latex_labels{$key} = q|6.2.5|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.rootwin_of/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.mx_i/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/clientwin_do_manage_alt/; $external_latex_labels{$key} = q|6.9|; $noresave{$key} = "$nosave"; -$key = q/fn:ioncore.match_winprop_name/; -$external_latex_labels{$key} = q|6.1|; -$noresave{$key} = "$nosave"; - $key = q/ioncore_sigchld_hook/; $external_latex_labels{$key} = q|6.9|; $noresave{$key} = "$nosave"; @@ -2482,11 +2650,11 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:gr.refresh/; -$external_latex_labels{$key} = q|6.1.14|; +$external_latex_labels{$key} = q|6.1.16|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.rqorder/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:mod_menu.grabmenu/; @@ -2498,7 +2666,7 @@ $external_latex_labels{$key} = q|6.2.3|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.size_hints/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:WEdln.delete/; @@ -2509,6 +2677,10 @@ $key = q/fn:ioncore.getwinprop/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/fn:WHook.remove/; +$external_latex_labels{$key} = q|6.1.6|; +$noresave{$key} = "$nosave"; + $key = q/fn:ioncore.request_selection/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; @@ -2522,7 +2694,7 @@ $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.goto/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.goto_next_screen/; @@ -2541,6 +2713,10 @@ $key = q/fn:ioncore.aboutmsg/; $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; +$key = q/sec:grmisc/; +$external_latex_labels{$key} = q|4.3|; +$noresave{$key} = "$nosave"; + $key = q/chap:prelim/; $external_latex_labels{$key} = q|2|; $noresave{$key} = "$nosave"; @@ -2566,11 +2742,15 @@ $external_latex_labels{$key} = q|6.1|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.is_activity/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; +$noresave{$key} = "$nosave"; + +$key = q/sec:statusd/; +$external_latex_labels{$key} = q|5.4|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.rqgeom/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:WInput.scrolldown/; @@ -2605,12 +2785,16 @@ $key = q/sec:tilingref/; $external_latex_labels{$key} = q|6.2|; $noresave{$key} = "$nosave"; +$key = q/fn:WTimer.is_set/; +$external_latex_labels{$key} = q|6.1.13|; +$noresave{$key} = "$nosave"; + $key = q/fn:WRegion.set_name/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:table.join/; -$external_latex_labels{$key} = q|6.1.16|; +$external_latex_labels{$key} = q|6.1.18|; $noresave{$key} = "$nosave"; $key = q/fn:ioncore.activity_first/; @@ -2622,11 +2806,11 @@ $external_latex_labels{$key} = q|6.6|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.is_hidden/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:WRegion.get_configuration/; -$external_latex_labels{$key} = q|6.1.9|; +$external_latex_labels{$key} = q|6.1.10|; $noresave{$key} = "$nosave"; $key = q/fn:mod_menu.get/; @@ -2666,7 +2850,7 @@ $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; $key = q/fn:export/; -$external_latex_labels{$key} = q|6.1.13|; +$external_latex_labels{$key} = q|6.1.15|; $noresave{$key} = "$nosave"; $key = q/chap:gr/; @@ -2690,7 +2874,7 @@ $external_latex_labels{$key} = q|6.9|; $noresave{$key} = "$nosave"; $key = q/fn:table.icat/; -$external_latex_labels{$key} = q|6.1.16|; +$external_latex_labels{$key} = q|6.1.18|; $noresave{$key} = "$nosave"; $key = q/fn:WEdln.kill_line/; @@ -2706,13 +2890,17 @@ $external_latex_labels{$key} = q|6.3|; $noresave{$key} = "$nosave"; $key = q/fn:WMPlex.get_index/; -$external_latex_labels{$key} = q|6.1.7|; +$external_latex_labels{$key} = q|6.1.8|; $noresave{$key} = "$nosave"; $key = q/fn:WEdln.skip_word/; $external_latex_labels{$key} = q|6.3.2|; $noresave{$key} = "$nosave"; +$key = q/ioncore_submap_ungrab_hook/; +$external_latex_labels{$key} = q|6.9|; +$noresave{$key} = "$nosave"; + $key = q/fn:WGroup.attach_new/; $external_latex_labels{$key} = q|6.1.3|; $noresave{$key} = "$nosave"; diff --git a/doc/ionconf/node1.html b/doc/ionconf/node1.html index b243cb3..8027def 100644 --- a/doc/ionconf/node1.html +++ b/doc/ionconf/node1.html @@ -28,26 +28,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -60,219 +60,243 @@ Contents

    diff --git a/doc/ionconf/node10.html b/doc/ionconf/node10.html index 6499263..d15711c 100644 --- a/doc/ionconf/node10.html +++ b/doc/ionconf/node10.html @@ -28,31 +28,31 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    @@ -79,10 +79,12 @@ List of functions
    ioncore.chdir_for
    ioncore.clientwin_i
    ioncore.compile_cmd +
    ioncore.create_timer
    ioncore.create_ws
    ioncore.current
    ioncore.defbindings
    ioncore.defctxmenu +
    ioncore.defer
    ioncore.deflayout
    ioncore.defmenu
    ioncore.defshortening @@ -97,6 +99,7 @@ List of functions
    ioncore.getbindings
    ioncore.getctxmenu
    ioncore.get_dir_for +
    ioncore.get_hook
    ioncore.getlayout
    ioncore.getmenu
    ioncore.get_paths @@ -116,7 +119,7 @@ List of functions
    ioncore.lookup_clientwin
    ioncore.lookup_region
    ioncore.lookup_script -
    ioncore.match_winprop_name +
    ioncore.match_winprop_dflt
    ioncore.mclick
    ioncore.mdblclick
    ioncore.mdrag @@ -139,7 +142,11 @@ List of functions
    ioncore.shutdown
    ioncore.snapshot
    ioncore.submap +
    ioncore.submap_enter +
    ioncore.submap_wait
    ioncore.submenu +
    ioncore.tabnum.clear +
    ioncore.tabnum.show
    ioncore.tagged_attach
    ioncore.tagged_clear
    ioncore.tagged_first @@ -194,7 +201,11 @@ List of functions
    mod_query.warn
    mod_sp.set_shown
    mod_sp.set_shown_on +
    mod_statusbar.create +
    mod_statusbar.inform +
    mod_statusbar.launch_statusd
    mod_statusbar.statusbars +
    mod_statusbar.update
    mod_tiling.get
    mod_tiling.mkbottom
    mod_tiling.set @@ -254,8 +265,8 @@ List of functions
    WFrame.mode
    WFrame.p_switch_tab
    WFrame.p_tabdrag +
    WFrame.set_grattr
    WFrame.set_mode -
    WFrame.set_numbers
    WFrame.set_shaded
    WGroup.attach
    WGroup.attach_new @@ -265,6 +276,9 @@ List of functions
    WGroup.set_bottom
    WGroup.set_fullscreen
    WGroupWS.attach_framed +
    WHook.add +
    WHook.listed +
    WHook.remove
    WInfoWin.set_text
    WInput.cancel
    WInput.scrolldown @@ -337,7 +351,7 @@ List of functions
    WSplitSplit.tl
    WSplit.transpose
    WStatusBar.get_template_table -
    WStatusBar.is_systray_extl +
    WStatusBar.is_systray
    WStatusBar.set_systray
    WStatusBar.set_template
    WStatusBar.set_template_table @@ -355,37 +369,40 @@ List of functions
    WTiling.split_tree
    WTiling.transpose_at
    WTiling.unsplit_at +
    WTimer.is_set +
    WTimer.reset +
    WTimer.set
    WWindow.p_move
    WWindow.p_resize
    WWindow.xid
    diff --git a/doc/ionconf/node11.html b/doc/ionconf/node11.html index 4ad6ff2..9803649 100644 --- a/doc/ionconf/node11.html +++ b/doc/ionconf/node11.html @@ -28,26 +28,26 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -57,1086 +57,184 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    Index


    -
    aboutmsg - : 6.1
    acrobatic - : 3.5 -
    activity_first - : 6.1 -
    activity_i - : 6.1 + : 3.5
    Alt - : 3.3.5 + : 3.3.5
    AnyModifier - : 3.3.5 -
    append - : 6.1.16 + : 3.3.5
    resizeinc - : 3.5.1 - | 3.5.1 -
    attach - : 6.1.3 - | 6.1.7 - | 6.5.1 -
    attach_framed - : 6.1.5 -
    attach_new - : 6.1.3 - | 6.1.7 -
    back - : 6.3.2 -
    backspace - : 6.3.2 -
    bdoc - : 6.1 -
    begin_kbresize - : 6.1.9 -
    bkill_word - : 6.3.2 -
    bol - : 6.3.2 -
    bottom - : 6.1.3 -
    br - : 6.2.4 -
    bskip_word - : 6.3.2 + : 3.5.1 + | 3.5.1
    Button-n - : 3.3.6 -
    cancel - : 6.1.8 - | 6.3.3 - | 6.4.1 -
    chdir_for - : 6.1 + : 3.3.6
    class
    -
    winprop : 3.5.2 +
    winprop : 3.5.2
    -
    clear_mark - : 6.3.2
    clientwin_do_manage_alt - : 6.9 -
    clientwin_i - : 6.1 + : 6.9
    clientwin_mapped_hook - : 6.9 + : 6.9
    clientwin_property_change_hook - : 6.9 + : 6.9
    clientwin_unmapped_hook - : 6.9 -
    compile_cmd - : 6.1 -
    complete - : 6.3.2 -
    contents - : 6.3.2 -
    context - : 6.3.2 + : 6.9
    Control - : 3.3.5 -
    copy - : 6.1.16 - | 6.3.2 -
    create_ws - : 6.1 -
    current - : 6.1 - | 6.1.9 - | 6.2.2 -
    current_scr - : 6.1.10 -
    cut - : 6.3.2 -
    de
    -
    defstyle : 6.8 -
    defstyle_rootwin : 6.8 -
    reset : 6.8 -
    substyle : 6.8 -
    -
    dec_index - : 6.1.7 -
    defbindings - : 6.1 -
    defcmd - : 6.3 -
    defctxmenu - : 6.1 -
    deflayout - : 6.1 + : 3.3.5
    defmenu - : 3.4.1 - | 6.1 -
    defshortening - : 6.1 -
    defstyle - : 6.8 -
    defstyle_rootwin - : 6.8 -
    defwinprop - : 6.1 -
    delete - : 6.3.2 -
    detach - : 6.1 -
    dir - : 6.2.4 + : 3.4.1
    drawing engine - : 4.1 -
    eol - : 6.3.2 + : 4.1
    ETCDIR - : 3.1 -
    exec - : 6.1 -
    exec_on - : 6.1 -
    export - : 6.1.13 -
    farthest - : 6.2.5 -
    find_manager - : 6.1 -
    find_screen_id - : 6.1 -
    finish - : 6.1.8 - | 6.3.2 - | 6.4.1 -
    flip - : 6.2.4 -
    flip_at - : 6.2.5 + : 3.1
    float - : 3.5 -
    focushistory_i - : 6.1 -
    forward - : 6.3.2 + : 3.5
    frame_managed_changed_hook - : 6.9 + : 6.9
    fullscreen - : 3.5 -
    geom - : 6.1.8 - | 6.1.9 - | 6.2.1 -
    get - : 6.1 - | 6.2 - | 6.3 - | 6.4 - | 6.5.1 -
    get_configuration - : 6.1.9 -
    get_dir_for - : 6.1 -
    get_ident - : 6.1.1 -
    get_index - : 6.1.7 -
    get_paths - : 6.1 -
    get_savefile - : 6.1 -
    get_stdisp - : 6.1.7 -
    get_template_table - : 6.7.1 -
    getbindings - : 6.1 -
    getctxmenu - : 6.1 -
    getlayout - : 6.1 -
    getmenu - : 6.1 -
    getwinprop - : 6.1 -
    goto - : 6.1.9 -
    goto_activity - : 6.1 -
    goto_first - : 6.1 -
    goto_next - : 6.1 -
    goto_next_screen - : 6.1 -
    goto_nth_screen - : 6.1 -
    goto_prev_screen - : 6.1 -
    goto_previous - : 6.1 -
    gr
    -
    read_config : 6.1.14 -
    refresh : 6.1.14 -
    select_engine : 6.1.14 -
    -
    grabmenu - : 6.4 -
    groupleader_of - : 6.1.9 -
    history_clear - : 6.3 -
    history_get - : 6.3 -
    history_next - : 6.3.2 -
    history_prev - : 6.3.2 -
    history_push - : 6.3 -
    history_search - : 6.3 -
    history_table - : 6.3 -
    icat - : 6.1.16 -
    id - : 6.1.11 + : 3.5
    ignore_resizeinc - : 3.5.1 - | 3.5.1 + : 3.5.1 + | 3.5.1
    ignore_cfgrq - : 3.5 + : 3.5
    ignore_max_size - : 3.5.1 + : 3.5.1
    ignore_min_size - : 3.5.1 + : 3.5.1
    ignore_net_active_window - : 3.5 -
    inc_index - : 6.1.7 -
    insstr - : 6.3.2 + : 3.5
    instance
    -
    winprop : 3.5.2 -
    -
    ioncore
    -
    aboutmsg : 6.1 -
    activity_first : 6.1 -
    activity_i : 6.1 -
    bdoc : 6.1 -
    chdir_for : 6.1 -
    clientwin_i : 6.1 -
    compile_cmd : 6.1 -
    create_ws : 6.1 -
    current : 6.1 -
    defbindings : 6.1 -
    defctxmenu : 6.1 -
    deflayout : 6.1 -
    defmenu : 6.1 -
    defshortening : 6.1 -
    defwinprop : 6.1 -
    detach : 6.1 -
    exec : 6.1 -
    exec_on : 6.1 -
    find_manager : 6.1 -
    find_screen_id : 6.1 -
    focushistory_i : 6.1 -
    get : 6.1 -
    get_dir_for : 6.1 -
    get_paths : 6.1 -
    get_savefile : 6.1 -
    getbindings : 6.1 -
    getctxmenu : 6.1 -
    getlayout : 6.1 -
    getmenu : 6.1 -
    getwinprop : 6.1 -
    goto_activity : 6.1 -
    goto_first : 6.1 -
    goto_next : 6.1 -
    goto_next_screen : 6.1 -
    goto_nth_screen : 6.1 -
    goto_prev_screen : 6.1 -
    goto_previous : 6.1 -
    is_i18n : 6.1 -
    kpress : 6.1 -
    kpress_wait : 6.1 -
    load_module : 6.1 -
    lookup_clientwin : 6.1 -
    lookup_region : 6.1 -
    lookup_script : 6.1 -
    match_winprop_name : 6.1 -
    mclick : 6.1 -
    mdblclick : 6.1 -
    mdrag : 6.1 -
    menuentry : 6.1 -
    mpress : 6.1 -
    navi_first : 6.1 -
    navi_next : 6.1 -
    popen_bgread : 6.1 -
    progname : 6.1 -
    read_savefile : 6.1 -
    refresh_stylelist : 6.1 -
    region_i : 6.1 -
    request_selection : 6.1 -
    resign : 6.1 -
    restart : 6.1 -
    restart_other : 6.1 -
    set : 6.1 -
    set_paths : 6.1 -
    set_selection : 6.1 -
    shutdown : 6.1 -
    snapshot : 6.1 -
    submap : 6.1 -
    submenu : 6.1 -
    tagged_attach : 6.1 -
    tagged_clear : 6.1 -
    tagged_first : 6.1 -
    tagged_i : 6.1 -
    TR : 6.1 -
    unsqueeze : 6.1 -
    version : 6.1 -
    warn : 6.1 -
    warn_traced : 6.1 -
    write_savefile : 6.1 -
    x_change_property : 6.1 -
    x_delete_property : 6.1 -
    x_get_atom_name : 6.1 -
    x_get_text_property : 6.1 -
    x_get_window_property : 6.1 -
    x_intern_atom : 6.1 -
    x_set_text_property : 6.1 +
    winprop : 3.5.2
    ioncore_deinit_hook - : 6.9 + : 6.9
    ioncore_post_layout_setup_hook - : 6.9 + : 6.9
    ioncore_sigchld_hook - : 6.9 + : 6.9
    ioncore_snapshot_hook - : 6.9 -
    is_active - : 6.1.9 -
    is_activity - : 6.1.9 -
    is_fullscreen - : 6.1.3 -
    is_hidden - : 6.1.7 -
    is_histcompl - : 6.3.2 -
    is_i18n - : 6.1 -
    is_mapped - : 6.1.9 -
    is_shaded - : 6.1.2 -
    is_systray_extl - : 6.7.1 -
    is_tagged - : 6.1.9 -
    join - : 6.1.16 + : 6.9 +
    ioncore_submap_ungrab_hook + : 6.9 +
    is_dockapp
    +
    winprop : 3.5.2 +
    +
    is_transient
    +
    winprop : 3.5.2 +
    jumpto - : 3.5 + : 3.5
    keysymdef.h - : 3.3.5 -
    kill - : 6.1.1 -
    kill_line - : 6.3.2 -
    kill_to_bol - : 6.3.2 -
    kill_to_eol - : 6.3.2 -
    kill_word - : 6.3.2 -
    kpress - : 6.1 -
    kpress_wait - : 6.1 -
    load_module - : 6.1 -
    Lock : 3.3.5 -
    lookup_clientwin - : 6.1 -
    lookup_region - : 6.1 -
    lookup_script - : 6.1 -
    managed_i - : 6.1.3 - | 6.1.7 - | 6.2.5 -
    manager - : 2.2.2.1 - | 6.1.9 -
    map - : 6.1.16 -
    mark - : 6.3.2 -
    match_winprop_name - : 6.1 +
    Lock + : 3.3.5 +
    manager + : 2.2.2.1
    max_size - : 3.5.1 -
    maximize_horiz - : 6.1.2 -
    maximize_vert - : 6.1.2 -
    mclick - : 6.1 -
    mdblclick - : 6.1 -
    mdrag - : 6.1 -
    menu - : 6.4 + : 3.5.1
    menuentry - : 3.4.1 - | 6.1 + : 3.4.1
    menus - : 3.4.1 -
    message - : 6.3 + : 3.4.1
    min_size - : 3.5.1 -
    mkbottom - : 6.2 -
    mod_dock
    -
    set_floating_shown_on : 6.5 -
    -
    mod_menu
    -
    get : 6.4 -
    grabmenu : 6.4 -
    menu : 6.4 -
    pmenu : 6.4 -
    set : 6.4 -
    -
    mod_query
    -
    defcmd : 6.3 -
    get : 6.3 -
    history_clear : 6.3 -
    history_get : 6.3 -
    history_push : 6.3 -
    history_search : 6.3 -
    history_table : 6.3 -
    message : 6.3 -
    popen_completions : 6.3 -
    query : 6.3 -
    query_attachclient : 6.3 -
    query_editfile : 6.3 -
    query_exec : 6.3 -
    query_gotoclient : 6.3 -
    query_lua : 6.3 -
    query_man : 6.3 -
    query_menu : 6.3 -
    query_renameframe : 6.3 -
    query_renameworkspace : 6.3 -
    query_restart : 6.3 -
    query_runfile : 6.3 -
    query_shutdown : 6.3 -
    query_ssh : 6.3 -
    query_workspace : 6.3 -
    query_yesno : 6.3 -
    set : 6.3 -
    show_about_ion : 6.3 -
    show_tree : 6.3 -
    warn : 6.3 -
    -
    mod_sp
    -
    set_shown : 6.6 -
    set_shown_on : 6.6 -
    -
    mod_statusbar
    -
    statusbars : 6.7 -
    -
    mod_tiling
    -
    get : 6.2 -
    mkbottom : 6.2 -
    set : 6.2 -
    untile : 6.2 -
    -
    mode - : 6.1.2 + : 3.5.1
    ModN - : 3.3.5 -
    move - : 6.1.8 -
    mpress - : 6.1 -
    mx_count - : 6.1.7 -
    mx_current - : 6.1.7 -
    mx_i - : 6.1.7 -
    mx_nth - : 6.1.7 -
    name - : 6.1.9 -
    navi_first - : 6.1 -
    navi_next - : 6.1 + : 3.3.5 +
    name
    +
    winprop : 3.5.2 +
    new_group - : 3.5 -
    next_completion - : 6.3.2 -
    nextto - : 6.2.5 -
    node_of - : 6.2.5 -
    nudge - : 6.1.1 + : 3.5
    NumLock - : 3.3.5 + : 3.3.5
    Obj - : 2.2.1 + : 2.2.1
    oneshot - : 3.5 -
    p_move - : 6.1.12 -
    p_resize - : 6.1.12 -
    p_switch_tab - : 6.1.2 -
    p_tabdrag - : 6.1.2 -
    parent - : 2.2.2.1 - | 6.1.9 - | 6.2.1 -
    paste - : 6.3.2 -
    pmenu - : 6.4 -
    point - : 6.3.2 -
    popen_bgread - : 6.1 -
    popen_completions - : 6.3 + : 3.5 +
    parent + : 2.2.2.1
    PREFIX - : 3.1 -
    prev_completion - : 6.3.2 -
    progname - : 6.1 -
    query - : 6.3 -
    query_attachclient - : 6.3 -
    query_editfile - : 6.3 -
    query_exec - : 6.3 -
    query_gotoclient - : 6.3 -
    query_lua - : 6.3 -
    query_man - : 6.3 -
    query_menu - : 6.3 -
    query_renameframe - : 6.3 -
    query_renameworkspace - : 6.3 -
    query_restart - : 6.3 -
    query_runfile - : 6.3 -
    query_shutdown - : 6.3 -
    query_ssh - : 6.3 -
    query_workspace - : 6.3 -
    query_yesno - : 6.3 -
    quote_next - : 6.1.1 -
    read_config - : 6.1.14 -
    read_savefile - : 6.1 -
    refresh - : 6.1.14 -
    refresh_stylelist - : 6.1 -
    reg - : 6.2.3 + : 3.1
    region_do_warp_alt - : 6.9 -
    region_i - : 6.1 + : 6.9
    region_notify_hook - : 6.9 -
    request_selection - : 6.1 -
    reset - : 6.8 -
    resign - : 6.1 -
    resize - : 6.1.8 - | 6.5.1 -
    restart - : 6.1 -
    restart_other - : 6.1 + : 6.9
    role
    -
    winprop : 3.5.2 +
    winprop : 3.5.2
    root window - : 2.2.1 -
    rootwin_of - : 6.1.9 -
    rqclose - : 6.1.9 -
    rqclose_propagate - : 6.1.9 -
    rqgeom - : 6.1.8 - | 6.1.9 - | 6.2.1 -
    rqorder - : 6.1.9 + : 2.2.1
    screen
    -
    physical : 2.2.1 -
    X : 2.2.1 +
    physical : 2.2.1 +
    X : 2.2.1
    screen_managed_changed_hook - : 6.9 -
    screen_of - : 6.1.9 -
    scrolldown - : 6.3.3 + : 6.9
    ScrollLock - : 3.3.5 -
    scrollup - : 6.3.3 -
    select_engine - : 6.1.14 -
    select_next - : 6.4.1 -
    select_nth - : 6.4.1 -
    select_prev - : 6.4.1 -
    set - : 6.1 - | 6.2 - | 6.3 - | 6.4 - | 6.5.1 -
    set_activity - : 6.1.9 -
    set_bottom - : 6.1.3 -
    set_completions - : 6.3.1 -
    set_context - : 6.3.2 -
    set_floating - : 6.2.5 -
    set_floating_at - : 6.2.5 -
    set_floating_shown_on - : 6.5 -
    set_fullscreen - : 6.1.3 -
    set_hidden - : 6.1.7 -
    set_index - : 6.1.7 -
    set_managed_offset - : 6.1.11 -
    set_mark - : 6.3.2 -
    set_mode - : 6.1.2 -
    set_name - : 6.1.9 -
    set_name_exact - : 6.1.9 -
    set_numbers - : 6.1.2 -
    set_paths - : 6.1 -
    set_selection - : 6.1 -
    set_shaded - : 6.1.2 -
    set_shown - : 6.6 -
    set_shown_on - : 6.6 -
    set_stdisp - : 6.1.7 -
    set_systray - : 6.7.1 -
    set_tagged - : 6.1.9 -
    set_template - : 6.7.1 -
    set_template_table - : 6.7.1 -
    set_text - : 6.1.6 -
    shell_safe - : 6.1.15 + : 3.3.5
    Shift - : 3.3.5 -
    show_about_ion - : 6.3 -
    show_tree - : 6.3 -
    shutdown - : 6.1 -
    size_hints - : 6.1.9 -
    skip_word - : 6.3.2 -
    snapshot - : 6.1 -
    split - : 6.2.5 -
    split_at - : 6.2.5 -
    split_top - : 6.2.5 -
    split_tree - : 6.2.5 + : 3.3.5
    statusbar - : 3.5 -
    statusbars - : 6.7 -
    string
    -
    shell_safe : 6.1.15 -
    + : 3.5
    style - : 4.1 -
    submap - : 6.1 + : 4.1
    submenu - : 3.4.1 - | 6.1 -
    substyle - : 4.1 - | 6.8 -
    switch_next - : 6.1.7 -
    switch_nth - : 6.1.7 -
    switch_prev - : 6.1.7 + : 3.4.1 +
    substyle + : 4.1
    switchto - : 3.5 + : 3.5
    system.mk - : 3.1 -
    table
    -
    append : 6.1.16 -
    copy : 6.1.16 -
    icat : 6.1.16 -
    join : 6.1.16 -
    map : 6.1.16 -
    -
    tagged_attach - : 6.1 -
    tagged_clear - : 6.1 -
    tagged_first - : 6.1 -
    tagged_i - : 6.1 + : 3.1
    target - : 3.5 + : 3.5
    tiling_placement_alt - : 6.9 -
    tl - : 6.2.4 -
    TR - : 6.1 + : 6.9
    transient - : 3.5.3 + : 3.5.3
    transient_mode - : 3.5 + : 3.5
    transparent - : 3.5 -
    transpose - : 6.2.1 -
    transpose_at - : 6.2.5 -
    transpose_chars - : 6.3.2 -
    transpose_words - : 6.3.2 -
    typeahead_clear - : 6.4.1 -
    unsplit_at - : 6.2.5 -
    unsqueeze - : 6.1 -
    untile - : 6.2 -
    update - : 6.7.1 + : 3.5
    userpos - : 3.5.1 -
    version - : 6.1 -
    warn - : 6.1 - | 6.3 -
    warn_traced - : 6.1 -
    WClientWin - : 2.2.1 -
    -
    get_ident : 6.1.1 -
    kill : 6.1.1 -
    nudge : 6.1.1 -
    quote_next : 6.1.1 -
    xid : 6.1.1 -
    -
    WComplProxy
    -
    set_completions : 6.3.1 -
    -
    WDock
    -
    attach : 6.5.1 -
    get : 6.5.1 -
    resize : 6.5.1 -
    set : 6.5.1 -
    -
    WEdln - : 2.2.1 -
    -
    back : 6.3.2 -
    backspace : 6.3.2 -
    bkill_word : 6.3.2 -
    bol : 6.3.2 -
    bskip_word : 6.3.2 -
    clear_mark : 6.3.2 -
    complete : 6.3.2 -
    contents : 6.3.2 -
    context : 6.3.2 -
    copy : 6.3.2 -
    cut : 6.3.2 -
    delete : 6.3.2 -
    eol : 6.3.2 -
    finish : 6.3.2 -
    forward : 6.3.2 -
    history_next : 6.3.2 -
    history_prev : 6.3.2 -
    insstr : 6.3.2 -
    is_histcompl : 6.3.2 -
    kill_line : 6.3.2 -
    kill_to_bol : 6.3.2 -
    kill_to_eol : 6.3.2 -
    kill_word : 6.3.2 -
    mark : 6.3.2 -
    next_completion : 6.3.2 -
    paste : 6.3.2 -
    point : 6.3.2 -
    prev_completion : 6.3.2 -
    set_context : 6.3.2 -
    set_mark : 6.3.2 -
    skip_word : 6.3.2 -
    transpose_chars : 6.3.2 -
    transpose_words : 6.3.2 -
    -
    WFrame - : 2.2.1 -
    -
    is_shaded : 6.1.2 -
    maximize_horiz : 6.1.2 -
    maximize_vert : 6.1.2 -
    mode : 6.1.2 -
    p_switch_tab : 6.1.2 -
    p_tabdrag : 6.1.2 -
    set_mode : 6.1.2 -
    set_numbers : 6.1.2 -
    set_shaded : 6.1.2 -
    -
    WGroup + : 3.5.1 +
    WClientWin + : 2.2.1 +
    WEdln : 2.2.1 -
    -
    attach : 6.1.3 -
    attach_new : 6.1.3 -
    bottom : 6.1.3 -
    is_fullscreen : 6.1.3 -
    managed_i : 6.1.3 -
    set_bottom : 6.1.3 -
    set_fullscreen : 6.1.3 -
    +
    WFrame + : 2.2.1 +
    WGroup + : 2.2.1
    WGroupCW - : 2.2.1 -
    WGroupWS - : 2.2.1 -
    -
    attach_framed : 6.1.5 -
    -
    WInfoWin
    -
    set_text : 6.1.6 -
    + : 2.2.1 +
    WGroupWS + : 2.2.1
    Winprops - : 3.5 -
    WInput - : 2.2.1 -
    -
    cancel : 6.3.3 -
    scrolldown : 6.3.3 -
    scrollup : 6.3.3 -
    -
    WMenu
    -
    cancel : 6.4.1 -
    finish : 6.4.1 -
    select_next : 6.4.1 -
    select_nth : 6.4.1 -
    select_prev : 6.4.1 -
    typeahead_clear : 6.4.1 -
    + : 3.5 +
    WInput + : 2.2.1
    WMessage - : 2.2.1 -
    WMoveresMode
    -
    cancel : 6.1.8 -
    finish : 6.1.8 -
    geom : 6.1.8 -
    move : 6.1.8 -
    resize : 6.1.8 -
    rqgeom : 6.1.8 -
    -
    WMPlex
    -
    attach : 6.1.7 -
    attach_new : 6.1.7 -
    dec_index : 6.1.7 -
    get_index : 6.1.7 -
    get_stdisp : 6.1.7 -
    inc_index : 6.1.7 -
    is_hidden : 6.1.7 -
    managed_i : 6.1.7 -
    mx_count : 6.1.7 -
    mx_current : 6.1.7 -
    mx_i : 6.1.7 -
    mx_nth : 6.1.7 -
    set_hidden : 6.1.7 -
    set_index : 6.1.7 -
    set_stdisp : 6.1.7 -
    switch_next : 6.1.7 -
    switch_nth : 6.1.7 -
    switch_prev : 6.1.7 -
    -
    WRegion - : 2.2.1 -
    -
    begin_kbresize : 6.1.9 -
    current : 6.1.9 -
    geom : 6.1.9 -
    get_configuration : 6.1.9 -
    goto : 6.1.9 -
    groupleader_of : 6.1.9 -
    is_active : 6.1.9 -
    is_activity : 6.1.9 -
    is_mapped : 6.1.9 -
    is_tagged : 6.1.9 -
    manager : 6.1.9 -
    name : 6.1.9 -
    parent : 6.1.9 -
    rootwin_of : 6.1.9 -
    rqclose : 6.1.9 -
    rqclose_propagate : 6.1.9 -
    rqgeom : 6.1.9 -
    rqorder : 6.1.9 -
    screen_of : 6.1.9 -
    set_activity : 6.1.9 -
    set_name : 6.1.9 -
    set_name_exact : 6.1.9 -
    set_tagged : 6.1.9 -
    size_hints : 6.1.9 -
    -
    write_savefile - : 6.1 -
    WRootWin + : 2.2.1 +
    WRegion + : 2.2.1 +
    WRootWin + : 2.2.1 +
    WScreen + : 2.2.1 +
    WSplit : 2.2.1 -
    -
    current_scr : 6.1.10 -
    -
    WScreen - : 2.2.1 -
    -
    id : 6.1.11 -
    set_managed_offset : 6.1.11 -
    -
    WSplit - : 2.2.1 -
    -
    geom : 6.2.1 -
    parent : 6.2.1 -
    rqgeom : 6.2.1 -
    transpose : 6.2.1 -
    -
    WSplitInner
    -
    current : 6.2.2 -
    -
    WSplitRegion
    -
    reg : 6.2.3 -
    -
    WSplitSplit
    -
    br : 6.2.4 -
    dir : 6.2.4 -
    flip : 6.2.4 -
    tl : 6.2.4 -
    -
    WStatusBar
    -
    get_template_table : 6.7.1 -
    is_systray_extl : 6.7.1 -
    set_systray : 6.7.1 -
    set_template : 6.7.1 -
    set_template_table : 6.7.1 -
    update : 6.7.1 -
    -
    WTiling - : 2.2.1 -
    -
    farthest : 6.2.5 -
    flip_at : 6.2.5 -
    managed_i : 6.2.5 -
    nextto : 6.2.5 -
    node_of : 6.2.5 -
    set_floating : 6.2.5 -
    set_floating_at : 6.2.5 -
    split : 6.2.5 -
    split_at : 6.2.5 -
    split_top : 6.2.5 -
    split_tree : 6.2.5 -
    transpose_at : 6.2.5 -
    unsplit_at : 6.2.5 -
    -
    WWindow +
    WTiling : 2.2.1 -
    -
    p_move : 6.1.12 -
    p_resize : 6.1.12 -
    xid : 6.1.12 -
    -
    x_change_property - : 6.1 -
    x_delete_property - : 6.1 -
    x_get_atom_name - : 6.1 -
    x_get_text_property - : 6.1 -
    x_get_window_property - : 6.1 -
    x_intern_atom - : 6.1 -
    x_set_text_property - : 6.1 -
    xid - : 6.1.1 - | 6.1.12 +
    WWindow + : 2.2.1
    Xinerama - : 2.2.1 + : 2.2.1
    xmodmap - : 3.3.5 + : 3.3.5
    xprop - : 3.5.3 + : 3.5.3
    diff --git a/doc/ionconf/node12.html b/doc/ionconf/node12.html index 0bbefa4..a2daa50 100644 --- a/doc/ionconf/node12.html +++ b/doc/ionconf/node12.html @@ -7,8 +7,8 @@ original version by: Nikos Drakos, CBLU, University of Leeds Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -About this document ... - +Bibliography + @@ -19,58 +19,53 @@ original version by: Nikos Drakos, CBLU, University of Leeds + + +

    + +

    +Bibliography +

    1 +
    The Ion 3 scripts repository, + http://iki.fi/tuomov/repos/ion-scripts-3/. +
    -

    -About this document ... -

    - Configuring and extending Ion3 with Lua

    -This document was generated using the -LaTeX2HTML translator Version 2002-2-1 (1.71) -

    -Copyright © 1993, 1994, 1995, 1996, -Nikos Drakos, -Computer Based Learning Unit, University of Leeds. -
    -Copyright © 1997, 1998, 1999, -Ross Moore, -Mathematics Department, Macquarie University, Sydney. -

    -The command line arguments were:
    - latex2html -show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf

    -The translation was initiated by tuomov on 2007-03-18


    diff --git a/doc/ionconf/node13.html b/doc/ionconf/node13.html new file mode 100644 index 0000000..b65d8cd --- /dev/null +++ b/doc/ionconf/node13.html @@ -0,0 +1,77 @@ + + + + + +About this document ... + + + + + + + + + + + + + + + + + + + + +

    +About this document ... +

    + Configuring and extending Ion3 with Lua

    +This document was generated using the +LaTeX2HTML translator Version 2002-2-1 (1.71) +

    +Copyright © 1993, 1994, 1995, 1996, +Nikos Drakos, +Computer Based Learning Unit, University of Leeds. +
    +Copyright © 1997, 1998, 1999, +Ross Moore, +Mathematics Department, Macquarie University, Sydney. +

    +The command line arguments were:
    + latex2html -show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf +

    +The translation was initiated by tuomov on 2007-05-06 +


    + + + diff --git a/doc/ionconf/node2.html b/doc/ionconf/node2.html index daebdf4..a824fd2 100644 --- a/doc/ionconf/node2.html +++ b/doc/ionconf/node2.html @@ -28,31 +28,31 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -63,99 +63,91 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    -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

    - -

    -and perhaps some tutorial pages at the lua-users wiki: + HREF="http://www.lua.org/docs.html">http://www.lua.org/docs.html, or +
    http://lua-users.org/wiki/LuaTutorial, -

    -

    -Back in this document, first in chapter 2 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 configure -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.

    -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 2 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 3.3) that to some extent mirror these classes.

    -In chapter 3 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 4 -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 5 (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 3, 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 4 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 +5. Finally, most of the functions provided by Ion's scripting interface -are listed and documented in the Function reference in chapter -6. At the end of the document is an alphabetical -listing of all these functions. - -

    +are listed and documented in the Function reference in Chapter +6. At the end of the document an alphabetical +listing of all these functions may be found.

    diff --git a/doc/ionconf/node3.html b/doc/ionconf/node3.html index 63c2666..cfe57dd 100644 --- a/doc/ionconf/node3.html +++ b/doc/ionconf/node3.html @@ -28,31 +28,31 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -61,22 +61,22 @@ original version by: Nikos Drakos, CBLU, University of Leeds Subsections @@ -140,7 +140,7 @@ should be loaded. Currently Ion provides the following modules:
    mod_dock
    -
    Module for docking Window Maker dockapps. +
    Module for docking Window Maker dock-apps. The dock can both float and be embedded as the statusbar.
    @@ -149,12 +149,6 @@ should be loaded. Currently Ion provides the following modules: be toggled on/off everywhere. Think of the 'console' in some first-person shooters. - -
    mod_mgmtmode
    -
    Support module for implementing ''management - modes'' with a XOR-frame similar to move/resize mode around selected - region. -
    mod_sm
    Session management support module. @@ -167,10 +161,10 @@ So-called drawing engines are also implemented as a modules, but they are not discussed here; see chapter 4.

    -The stock configuration for the 'ion3' executable loads all of the modules -mentioned above except mod_dock 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 ion3 executable loads all of the +modules mentioned above except mod_dock. +The stock configuration for the pwm3 executable (which differs +from the ion3 executable in a few configuration details) loads another set of modules.

    @@ -186,9 +180,9 @@ loads another set of modules.

    While Ion does not not have a truly object-oriented design 2.1, + HREF="#foot297">2.1, things that appear on the computer screen are, however, quite -naturally expressed as such ''objects''. Therefore Ion implements +naturally expressed as such ``objects''. Therefore Ion implements a rather primitive OO system for these screen objects and some other things. @@ -206,7 +200,7 @@ basic relations.

    For simplicity we consider only the essential-for-basic-configuration Ioncore, mod_tiling and mod_query classes. -See Appendix B for the full class hierachy visible +See Appendix B for the full class hierarchy visible to Lua side.

    @@ -227,7 +221,7 @@ implement.

    -

    +
    - + - + @@ -501,36 +527,39 @@ functions. Key presses: Mouse actions:

    The actions that most of these functions correspond to should be clear -and as explained in the reference, kpress_wait is simply -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, kpress_wait is simply +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. -WRegion.rqclose multiple times in a row. The submap -function is used to define submaps or ''prefix maps''. The second -argument to this function is table listing the key press actions -(kpress) in the submap +WRegion.rqclose multiple times in a row. The +submap function is used to define submaps or +``prefix maps''. The second argument to this function is table listing +the key press actions (kpress) in the submap. +The submap_enter handler is called when the submap +is entered, in which this handler is defined. Likewise, the +submap_wait handler is called when all modifiers +have been released while waiting for further key presses in the submap.

    The parameters keyspec and buttonspec are explained below @@ -583,36 +612,35 @@ defbindings("WFrame", { As seen above, the functions that create key binding specifications require a keyspec argument. This argument should be a string containing the name of a key as listed in the X header file keysymdef.h3.1 without the XK_ prefix. - + HREF="#foot876">3.1 without the XK_ prefix. + Most of the key names are quite intuitive while some are not. For example, the Enter key on the main part of the keyboard has the less common name Return while the one the numpad is called KP_Enter.

    -The keyspec string may optionally have multiple ''modifier'' names +The keyspec string may optionally have multiple ``modifier'' names followed by a plus sign (+) as a prefix. X defines the following modifiers: -

    + +

    Shift, Control, Mod1 to Mod5, AnyModifier and Lock. - - - - - - -

    + + + + +

    X allows binding all of these modifiers to almost any key and while this list of modifiers does not explicitly list keys such as -Alt that are common on modern keyboards, such +Alt that are common on modern keyboards, such keys are bound to one of the ModN. On systems running XFree86 Alt is usually Mod1. On Suns Mod1 is the diamond key -and Alt something else. One of the ''flying window'' keys on so +and Alt something else. One of the ``flying window'' keys on so called Windows-keyboards is probably mapped to Mod3 if you have -such a key. Use the program xmodmap +such a key. Use the program xmodmap to find out what exactly is bound where.

    @@ -623,11 +651,14 @@ specified modifiers in nested regions. For this reason, Ion recognises default.

    -Ion ignores the Lock modifier and any ModN () -bound to NumLock or -ScrollLock +Ion ignores the Lock modifier and any ModN ($N=1{\ldots} 5$) +bound to NumLock or +ScrollLock by default because such3.2 locking keys may otherwise + HREF="#foot855">3.2 locking keys may otherwise cause confusion.

    @@ -640,12 +671,12 @@ cause confusion. Button specifications are similar to key definitions but now instead of specifying modifiers and a key, you specify modifiers and one of the button names Button1 to -Button5. Additionally the +Button5. 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 -"border", "tab", "empty_tab", "client" and -nil (for the whole frame). +`border', `tab', `empty_tab', `client' +and nil (for the whole frame).

    For example, the following code binds dragging a tab with the first @@ -667,7 +698,7 @@ defbindings("WFrame", {

    The default binding configuration contains references to the variables META and ALTMETA instead of directly using the default -values of "Mod1+" and "" (nothing). As explained in +values of `Mod1+' and `' (nothing). As explained in section 3.2, the definitions of these variables appear in cfg_ion.lua. This way you can easily change the the modifiers used by all bindings in the default configuration without @@ -691,10 +722,10 @@ to it is available virtually everywhere.

    - - - - + + + + In the stock configuration file setup, menus are defined in the file cfg_menus.lua as previously mentioned. The mod_menu module must be loaded for one to be able to define menus, and this is done with @@ -743,24 +774,24 @@ just like the menus defined as above.

    - + - + - + - + - + - +
    Figure 2.1: Partial Ioncore, mod_tiling and mod_query @@ -259,77 +253,76 @@ The core classes:

    Obj
    -
    +
    Is the base of Ion's object system.

    WRegion
    -
    +
    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.

    WClientWin
    -
    is a class for +
    is a class for client window objects, the objects that window managers are supposed to manage.

    WWindow
    -
    is the base class for all +
    is the base class for all internal objects having an X window associated to them (WClientWins also have X windows associated to them). -

    -

    -
    WRootWin
    -
    is the class for - root windows of X screens. - Note that an ''X screen'' or root window is not necessarily a - single physical screen as a root window - may be split over multiple screens when hacks such as - Xinerama are used. (Actually there can be only - one root window when Xinerama is used.) -

    WMPlex
    -
    is a base class for all regions that''multiplex'' +
    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.

    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. +
    is an instance of WMPlex + for screens. + +

    +

    +
    WRootWin
    +
    is the class for + root windows of X screens. + It is an instance of WScreen. + Note that an ``X screen'' or root window is not necessarily a + single physical screen as a root window + may be split over multiple screens when ugly hacks such as + Xinerama are used. (Actually there can be only + one root window when Xinerama is used.)

    WFrame
    -
    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). +
    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).

    WGroup
    -
    is the base class for groups. +
    is the base class for groups. Particular types of groups are workspaces - (WGroupWS) + (WGroupWS) and groups of client windows - (WGroupCW). + (WGroupCW).
    @@ -339,12 +332,12 @@ Classes implemented by the mod_tiling module:

    WTiling
    -
    is the class for tilings +
    is the class for tilings of frames.
    WSplit
    -
    (or, more specifically, classes +
    (or, more specifically, classes that inherit it) encode the WTiling tree structure.
    @@ -355,26 +348,26 @@ Classes implemented by the mod_query module:

    WInput
    -
    is a virtual base class for the +
    is a virtual base class for the two classes below.
    WEdln
    -
    is the class for the ''queries'', +
    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.
    WMessage
    -
    implements the boxes for +
    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.

    -There are also some other ''proxy'' classes that do not refer +There are also some other ``proxy'' classes that do not refer to objects on the screen. The only important one of these for basic configuration is WMoveresMode that is used for binding callbacks in the move and resize mode. @@ -391,7 +384,7 @@ binding callbacks in the move and resize mode. 2.2.2.1 Parent-child relations Each object of type WRegion has a parent and possibly a manager -associated to it. The parent for an object is always a +associated to it. The parent for an object is always a WWindow and for WRegion with an X window (WClientWin, WWindow) the parent WWindow is given by the same relation of the X windows. For other WRegions the relation is not as clear. @@ -401,7 +394,7 @@ Figure 2.2.

    -

    +
    @@ -422,7 +415,7 @@ Most common parent-child relations

    WRegions have very little control over their children as a parent. -The manager WRegion has much more control over its +The manager WRegion has much more control over its managed WRegions. Managers, for example, handle resize requests, focusing and displaying of the managed regions. Indeed the manager--managed relationship gives a better picture of the logical ordering of objects on @@ -440,7 +433,7 @@ but all have a parent-a screen if not anything else.

    -

    +
    Figure 2.2: Most common parent-child relations
    @@ -504,7 +497,7 @@ consideration:



    Footnotes

    -
    ... design... design2.1
    the author doesn't like such artificial designs @@ -512,31 +505,31 @@ consideration:
    diff --git a/doc/ionconf/node4.html b/doc/ionconf/node4.html index 0aab7cc..4eaa00e 100644 --- a/doc/ionconf/node4.html +++ b/doc/ionconf/node4.html @@ -28,31 +28,31 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -61,60 +61,77 @@ original version by: Nikos Drakos, CBLU, University of Leeds Subsections
    @@ -140,8 +157,8 @@ configuration file ion.lua is provided in section 3.2. How keys and mouse action are bound to functions is described in detail in 3.3 and in section 3.5 winprops are -explained. For a reference on exported functions, see section -6. +explained. Finally, the statusbar is explained in 3.6. +For a reference on exported functions, see section 6.

    @@ -155,9 +172,9 @@ explained. For a reference on exported functions, see section Ion3, to which document applies, stores its stock configuration files in /usr/local/etc/ion3/ unless you, the OS package maintainer or whoever installed the package on the system has modified the variables -PREFIX or -ETCDIR in -system.mk before compiling Ion. +PREFIX or +ETCDIR in +system.mk before compiling Ion. In the first case you probably know where to find the files and in the other case the system administrator or the OS package maintainer should have provided documentation to point to the correct location. @@ -177,7 +194,7 @@ for a file, if no extension or path component is given, compiled .lua files.

    -All the configuration files are named cfg_*.lua with the ''*'' +All the configuration files are named cfg_*.lua with the ``*'' part varying. The configuration file for each module mod_modname is cfg_modname.lua, with modname varying by the module in question. The following table summarises these and other configuration @@ -232,20 +249,22 @@ file. Some basic 'feel' settings are usually configured there and the necessary modules and other configuration files configuring some more specific aspects of Ion are loaded there. In this section we take a walk through the stock cfg_ion.lua. -Notice that most of the settings are commented-out (- is a +Notice that most of the settings are commented-out (-- 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

     META="Mod1+"
     ALTMETA=""
     
    These settings cause most of Ion's key bindings to use Mod1 as the -modifier key. If 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 3.3. +modifier key. If 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 +3.3.

    Next we do some basic feel configuration: @@ -283,7 +302,7 @@ for ioncore.set for details.

    As a next step, in the actual cfg_ion.lua file, we load -cfg_defaults.lua. However, it is merely a conveniency file for +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 cfg_defaults.lua loads, just comment out the corresponding @@ -301,8 +320,8 @@ dopath("cfg_layouts") Most bindings and menus are defined in cfg_ioncore.lua. Details on making such definitions follow in sections 3.3 and 3.4, respectively. -some kludges or ''winprops'' to make some applications behave better -under Ion are colledted in cfg_kludges.lua; see section +some kludges or ``winprops'' to make some applications behave better +under Ion are collected in cfg_kludges.lua; see section 3.5 for details. In addition to these, this file lists quite a few statements of the form

    @@ -348,7 +367,7 @@ loaded prior to defining any module-specific bindings.
     
     

    Bindings are defined by calling the function -defbindings with the ''context'' of the +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 WMoveresMode) introduced in section 2.2, and fully @@ -365,7 +384,7 @@ defbindings("WFrame", {

    There has been some confusion among users about the need to define the -''context'' for each binding, so let me try to explain this design +``context'' for each binding, so let me try to explain this design decision here. The thing is that if there was a just a simple 'bind this key to this action' method without knowledge of the context, some limitations would have to be made on the available actions and writing @@ -373,31 +392,37 @@ custom handlers would be more complicated. In addition one may want to bind the same function to different key for different types of objects. Indeed, the workspace and frame tab switching functions are the same both classes being based on WMPlex, and in the stock configuration the -switch to :th workspaces is bound to Mod1+n while the switch to -:th tab is bound to the sequence Mod1+k n. - -

    -Currently known ''contexts'' include: -WScreen, -WMPlex, -WMPlex.toplevel, -WFrame, -WFrame.toplevel, -WFrame.floating, -WFrame.tiled, -WFrame.transient, -WMoveresMode, -WGroup, -WGroupCW, -WGroupWS, -WClientWin, -WTiling, and -WStatusBar. +switch to $n$:th workspaces is bound to Mod1+n while the switch to +$n$:th tab is bound to the sequence Mod1+k n. + +

    +Currently known contexts include: +`WScreen', +`WMPlex', +`WMPlex.toplevel', +`WFrame', +`WFrame.toplevel', +`WFrame.floating', +`WFrame.tiled', +`WFrame.transient', +`WMoveresMode', +`WGroup', +`WGroupCW', +`WGroupWS', +`WClientWin', +`WTiling', and +`WStatusBar'. Most of these should be self-explanatory, corresponding to objects -of class with the same name. The ones with .toplevel suffix -refer to screens and ''toplevel'' frames, i.e. frames that are -not used for transient windows. Likewise .transient refers -to frames in transient mode, and .tiled and .floating +of class with the same name. The ones with `.toplevel' suffix +refer to screens and ``toplevel'' frames, i.e. frames that are +not used for transient windows. Likewise `.transient' refers +to frames in transient mode, and `.tiled' and `.floating' to frames in, respectively, tiled and floating modes.

    @@ -422,9 +447,9 @@ gets to handle the action.

    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.

    Figure 2.3: Most common manager-managed relations
    @@ -445,13 +470,14 @@ variables are available in this code. These are + object referred to by _. This should seldom be needed.
    _chld Object corresponding to the currently active child window of the - object referred to by _.

    -For example, supposing '_' is a WFrame, the following -handler should move the active window to the right, if possible: +For example, supposing _ (underscore) is a WFrame, the +following handler should move the active window to the right, if +possible:

    @@ -466,7 +492,7 @@ handler should move the active window to the right, if possible:
     
     

    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 _sub and _chld): @@ -475,10 +501,10 @@ are supported (for both _sub and _chld):

    Guard Description
    "_sub:non-nil"
    `_sub:non-nil' The _sub parameter must be set.
    "_sub:SomeClass"
    `_sub:SomeClass' The _sub parameter must be member of class SomeClass.
    Menu name Description
    windowlist
    `windowlist' List of all client windows. Activating an entry jumps to that window.
    workspacelist
    `workspacelist' List of all workspaces. Activating an entry jumps to that workspaces.
    focuslist
    `focuslist' List of client windows with recent activity in them, followed by previously focused client windows.
    focuslist_
    `focuslist_' List of previously focused client windows.
    stylemenu
    `stylemenu' List of available look_*.lua style files. Activating an entry loads that style and ask to save the selection.
    ctxmenu
    `ctxmenu' Context menu for given object.
    @@ -772,7 +803,7 @@ just like the menus defined as above.

    -The ''ctxmenu'' is a special menu that is assembled from a defined context +The ``ctxmenu'' is a special menu that is assembled from a defined context menu for the object for which the menu was opened for, but also includes the context menus for the manager objects as submenus. @@ -793,9 +824,9 @@ defctxmenu("WFrame", {

    -Some of the same ''modes'' as were available for some bindings -may also be used: WFrame.tiled, WFrame.floating, -and WFrame.transient. +Some of the same ``modes'' as were available for some bindings +may also be used: `WFrame.tiled', `WFrame.floating', +and `WFrame.transient'.

    @@ -828,10 +859,7 @@ handlers (and elsewhere): mod_menu.grabmenu A special version of 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 Alt-Tab - handling.3.3 + after which the selected entry is activated. @@ -859,7 +887,7 @@ defbindings("WFrame", {

    -The so-called ''winprops'' can be used to change how +The so-called ``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 defwinprop with a table containing the properties to set and the @@ -877,7 +905,7 @@ usual method of identifying windows, and how to obtain this information.

    Description:
    -
    +
    Set this to true for Acrobat Reader. It has an annoying habit of trying to manage its dialogs instead of setting them as transients and letting the window manager do its job, causing @@ -895,7 +923,7 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    Set this to open the window in a floating frame, when in a group. @@ -910,7 +938,7 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    Should the window be initially in full screen mode?
    @@ -924,7 +952,7 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    Should configure requests on the window be ignored? Only has effect on floating windows. @@ -939,7 +967,7 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    Ignore extended WM hints _NET_ACTIVE_WINDOW request.
    @@ -953,7 +981,7 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    Should a newly created client window always be made active, even if the allocated frame isn't. @@ -968,7 +996,7 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    If the region specified by target winprop does not exist (or that winprop is not set), create a new workspace using the previously stored layout (see ioncore.deflayout) named by @@ -987,7 +1015,7 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    Discard this winprop after first use.
    @@ -1001,11 +1029,11 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    Put the window in the statusbar, in the named tray component, - (The default tray component is called simply "systray", + (The default tray component is called simply `systray', and others you give names to in your custom template, always - prefixed by "systray_". + prefixed by `systray_'.
    @@ -1018,7 +1046,7 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    Should a newly mapped client window be switched to within its frame. @@ -1033,7 +1061,7 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    The name of an object (workspace, frame) that should manage windows of this type. See also new_group. @@ -1048,11 +1076,11 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    - "normal": No change in behaviour. "current": +
    + `normal': No change in behaviour. `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. "off": The window should + transient by the application. `off': The window should be handled as a normal window even if it is marked as a transient by the application. @@ -1067,7 +1095,7 @@ usual method of identifying windows, and how to obtain this information.
    Description:
    -
    +
    Should frames be made transparent when this window is selected?
    @@ -1082,15 +1110,15 @@ usual method of identifying windows, and how to obtain this information.

    Additionally, the winprops -max_size, -min_size, -aspect, -resizeinc, +max_size, +min_size, +aspect, +resizeinc, and -ignore_max_size, -ignore_min_size, -ignore_aspect, -ignore_resizeinc, +ignore_max_size, +ignore_min_size, +ignore_aspect, +ignore_resizeinc, may be used to override application-supplied size hints. The four first ones are tables with the fields w and h, indicating the width and height size hints in pixels, and the latter ignore @@ -1098,7 +1126,7 @@ winprop is a boolean.

    Finally, the boolean -userpos option may be used to +userpos option may be used to override the USPosition flag of the size hints. Normally, when this flag is set, Ion tries to respect the supplied window position more than when it is not set. Obviously, this makes sense @@ -1113,15 +1141,22 @@ only for floating windows.

    -The identification information in the winprop specification is usually the -class, -role, -instance and -name -of the window. The 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. +The identification information supported are +class, +role, +instance, +name, +is_transient, and +is_dockapp. +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 name field is a Lua-style regular expression matched against +the window's title. The is_transient field is a boolean that can +be used to include or exclude transients only, while the 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 +icon windows.

    Ion looks for a matching winprop in the order listed by the following @@ -1138,7 +1173,7 @@ fields) is tried. class role instance -name +other E E @@ -1184,8 +1219,9 @@ fields) is tried.

    -If there are multiple winprops with other identification information -the same but different name, the longest match is chosen. +If there are multiple matching winprops with the same +class, role and instance, but other information +different, the most recently defined one is used.

    @@ -1199,7 +1235,7 @@ can be used to list the identification information required to set winprops for a window and all the transient windows managed within it.

    - + Another way to get the identification information is to use xprop. Simply run To get class and instance, simply run xprop WM_CLASS and click on the particular window of interest. The class is the latter of @@ -1208,21 +1244,24 @@ windows have this property - use the command xprop WM_ROLE. This method, however, will not work on transients.

    - -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 xprop is stupid and can't cope with this situation, returning the parent window's properties when the transient is clicked on. For this reason you'll have to do a little extra work to get the properties -for that window.3.4 +for that window.3.3

    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.

    @@ -1251,36 +1290,7 @@ defwinprop{

    -3.5.4.2 Fixing a Mozilla Firebird transient -

    - -

    -Mozilla Firebird (0.7) incorrectly does not set the 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. - -

    -

    -defwinprop{
    -    class = "MozillaFirebird-bin",
    -    name = "Opening .*",
    -    transient_mode = "current",
    -}
    -
    - -

    - -

    -3.5.4.3 Forcing newly created windows in named frames +3.5.4.2 Forcing newly created windows in named frames

    @@ -1297,7 +1307,7 @@ defwinprop{

    For this example to work, we have to somehow create a frame named -sysmonframe. One way to do this is to make the following +`sysmonframe'. One way to do this is to make the following call in the Mod1+F3 Lua code query:

    @@ -1309,35 +1319,192 @@ mod_query.query_renameframe(_) Recall that _ 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 sysmonframe, but we could just as well have used the +name to `sysmonframe', but we could just as well have used the default name formed from the frame's class name and an instance number.

    +

    + +
    +3.6 The statusbar +

    + +

    +The 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 mod_dock +docks. + +

    +The statusbar is configured in cfg_statusbar.lua. Typically, +the configuration consists of two steps: creating a statusbar with +mod_statusbar.create, and then launching the separate +ion-statusd status daemon process with +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 ion-statusd +monitors. (See Section 5.4 for more information on +writing ion-statusd monitors.) + +

    +A typical cfg_statusbar.lua configuration might look as follows: + +

    +

    +-- 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',
    +    },      
    +}
    +
    + +

    + +

    +3.6.1 The template +

    + +

    +The template specifies what is shown on the statusbar; for information +on the other options to mod_statusbar.create, see the reference. +Strings of the form `%spec' tokens specially interpreter by +the statusbar; the rest appears verbatim. The 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: `>' +for right, `<' for left, and `|' for centring. Additionally, +space following `%' (that is, the string `% '), adds +``stretchable space'' at that point. The special string `%filler' +may be used to flush the rest of the template to the right end of +the statusbar. + +

    +The stretchable space works as follows: 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. + +

    + +

    +3.6.2 The systray +

    + +

    +The special `%systray' and `%systray_*' +(`*' varying) monitors indicate where to place system tray +windows. There may be multiple of these. KDE-protocol system tray +icons are placed in `%systray' automatically, unless disabled +with the systray option. Otherwise the statusbar winprop may +be used to place any window in any particular `%systray_*'. + +

    + +

    +3.6.3 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 mod_statusbar.launch_statusd. +Ion comes with date, load and mail (for plain old mbox) +ion-statusd monitor scripts. More may be obtained from +the scripts repository [1]. These included scripts +provide the following monitors and their options + +

    + +

    +3.6.3.1 Date +

    + +

    +Options: date_format: The date format in as seen above, +in the usual strftime format. formats: table of +formats for additional date monitors, the key being the name +of the monitor (without the `date_' prefix). + +

    +Monitors: `date' and other user-specified ones with the +`date_' prefix. + +

    + +

    +3.6.3.2 Load +

    + +

    +Options: update_interval: Update interval in milliseconds +(default 10s). important_threshold: Threshold above which +the load is marked as important (default 1.5), so that the +drawing engine may be suitably hinted. critical_threshold: +Threshold above which the load is marked as critical (default 4.0). + +

    +Monitors: `load' (for all three values), +`load_1min', `load_5min' and `load_15min'. + +

    + +

    +3.6.3.3 Mail +

    + +

    +Options: update_interval: Update interval in milliseconds +(default 1min). mbox: mbox-format mailbox location +(default $MAIL). +files: list of additional mailboxes, the key giving the +name of the monitor. + +

    +Monitors: `mail_new', `mail_unread', +`mail_total', and corresponding +`mail_*_new', `mail_*_unread', and `mail_*_total' +for the additional mailboxes (`*' varying). + +

    +



    Footnotes

    -
    ...keysymdef.h...keysymdef.h3.1
    This file can usually be found in the directory /usr/X11R6/include/X11/.
    -
    ... such... such3.2
    Completely useless keys that should be gotten rid of in the author's opinion.
    -
    ... handling.... window.3.3
    -
    See the wcirculate.lua script in the Ion - scripts repository http://iki.fi/tuomov/repos/ion-scripts-3/. - -
    -
    ... window.3.4
    There's a patch to xprop to fix this, but nothing seems to be happening with respect to including it in XFree86. @@ -1346,31 +1513,31 @@ XFree86.
    diff --git a/doc/ionconf/node5.html b/doc/ionconf/node5.html index de5ae5e..b5247f6 100644 --- a/doc/ionconf/node5.html +++ b/doc/ionconf/node5.html @@ -28,31 +28,31 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -61,51 +61,53 @@ original version by: Nikos Drakos, CBLU, University of Leeds Subsections
    @@ -120,12 +122,13 @@ original version by: Nikos Drakos, CBLU, University of Leeds This chapter first gives in section 4.1 a general outline of how drawing engines are used, of style specifications and then in section 4.2 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 4.3.

    - +
    4.1 Drawing engines, style specifications and sub-styles

    @@ -133,7 +136,7 @@ for the default drawing engine.

    Ion's drawing routines are abstracted into so-called drawing engine modules that can, again depending on the system, be dynamically -loaded as needed. The drawing engine modules provide ''brushes'' +loaded as needed. The drawing engine modules provide ``brushes'' that objects can use to draw some high-level primitives such as borders and text boxes (in addition to simple text and rectangle drawing) on their windows and configure e.g. the shape and @@ -150,17 +153,17 @@ element1-element2-...-elementn

    -An example of such a style specification is tab-frame; +An example of such a style specification is `tab-frame'; see the table in subsection 4.1.1 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 (*) as some of the elements indicating +may have asterisks (`*') 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 foo-bar-baz be queried, then the following +for style `foo-bar-baz' be queried, then the following brushes are in order of preference:

    @@ -177,7 +180,7 @@ specified, also in the form

     attr1-attr2-...-attrn
     
    -These extra attributes are called substyles +These extra attributes are called substyles and allow, for example, the state of the object to be indicated by different colour sets while keeping the interface at an abstract level and the drawing engine completely ignorant @@ -206,27 +209,27 @@ tag and drag states.) Style name Description -frame +`frame' Style for frames. - Substyle attributes: active/inactive + Substyle attributes: `active'/`inactive' (mutually exclusive) and - quasiactive/not_quasiactive. + `quasiactive'/`not_quasiactive'. A frame is ``quasiactive'' when an active region - has a backlink to it, such as a detached window. + has a back-link to it, such as a detached window. -frame-tiled +`frame-tiled' A more specific style for tiled frames. - Substyle attributes as for frame. + Substyle attributes as for `frame'. -frame-tiled-alt +`frame-tiled-alt' An alternative style for tiled frames. Often used to disable the tab-bar. -frame-floating +`frame-floating' A more specific style for floating frames. -frame-transient +`frame-transient' A more specific style for frames containing transient windows. @@ -243,39 +246,39 @@ tag and drag states.) Style name Description -tab +`tab' Style for frames' tabs and menu entries. Substyle attributes: - active/inactive and - selected/unselected + `active'/`inactive' and + `selected'/`unselected' -tab-frame +`tab-frame' A more specific style for frames' tabs. Additional substyle attributes include: - tagged/not_tagged, - dragged/not_dragged, - activity/no_activity and - quasiactive/not_quasiactive. + `tagged'/`not_tagged', + `dragged'/`not_dragged', + `activity'/`no_activity', + `quasiactive'/`not_quasiactive'. -tab-frame-tiled, +`tab-frame-tiled',   -tab-frame-tiled-alt, +`tab-frame-tiled-alt',   -tab-frame-floating, +`tab-frame-floating',   -tab-frame-transient +`tab-frame-transient' More specific styles for frames in the different modes. -tab-menuentry +`tab-menuentry' A more specific style for entries in WMenus. - Additional substyle attributes include submenu and - occasionally also activity is used. + Additional substyle attributes include `submenu' and + occasionally also `activity' is used. -tab-menuentry-bigmenu +`tab-menuentry-bigmenu' An alternate style for entries in WMenus. @@ -291,30 +294,39 @@ tag and drag states.) Style name Description -input +`input' A style for WInputs. -input-edln +`input-edln' A more specific style for WEdlns. - Substyle attributes: selection for selected text and - cursor for the cursor indicating current editing point. + Substyle attributes: `selection' for selected text and + `cursor' for the cursor indicating current editing point. -input-message +`input-message' A more specific style for WMessages. -input-menu +`input-menu' A more specific style for WMenus. -input-menu-bigmenu +`input-menu-bigmenu' An alternate style for WMenus. -moveres_display +`moveres_display' The box displaying position/size when moving or resizing frames. -dock +`stdisp' +Any status display. + +`stdisp-dock' The dock. +`stdisp-statusbar' +The statusbar. Substyles include: + the name of any monitor/meter (such as `date'), and + the supplied hint. Typical hints are: `normal', + `important', and `critical'. +

    @@ -354,13 +366,13 @@ end

    The 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, gr.select_engine returns false +is not registered, gr.select_engine returns `false' and in this case we also exit the style setup script. If the engine was found, gr.select_engine sees that further requests for brushes are forwarded to that engine -and returns true. +and returns `true'.

    Before defining new styles it may be a good idea to clear old @@ -412,7 +424,7 @@ border elements and styles referred to there are explained in Figure

    -

    +
    @@ -450,10 +462,10 @@ in /usr/X11R6/lib/X11/rgb.txt (exact path varying). - + - + @@ -463,7 +475,7 @@ in /usr/X11R6/lib/X11/rgb.txt (exact path varying). background colour boxes. -
    Figure 4.1: Sketch of different border styles and elements
    Description
    highlight_colourColour for the ''highlight'' part of a border.Colour for the ``highlight'' part of a border.
    shadow_colourColour for the ''highlight'' part of a border.Colour for the ``shadow'' part of a border.
    foreground_colour Colour for the normal drawing operations, e.g. text.
    padding_colourColour for the ''padding'' part of a border border. Set to +Colour for the ``padding'' part of a border border. Set to background_colour if unset.
    @@ -485,14 +497,14 @@ indicating a number of pixels. border_style A string indicating the style of border; one of - elevated/inlaid/ridge/groove as seen in the - above sketch. + `elevated'/`inlaid'/`ridge'/`groove' + as seen in the above sketch. 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: `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. highlight_pixels Width of the highlight part of the border in pixels. @@ -525,7 +537,7 @@ indicating a number of pixels. text_align How text is to be aligned in text boxes/tabs; one of - the strings left/right/center. + the strings `left'/`right'/`center'. @@ -558,13 +570,13 @@ indicating a number of pixels.

    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 -tab-frame the substyles *-*-tagged and *-*-*-dragged +`tab-frame' the substyles `*-*-tagged' and `*-*-*-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 *-*-submenu are handled as a special case. +menus the substyles `*-*-submenu' are handled as a special case.

    Substyles are defined with the function de.substyle within the @@ -629,21 +641,39 @@ de.defstyle("tab-frame", {

    -

    -4.3 Miscellaneous settings +

    + +
    +4.3 Miscellaneous settings

    -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. + +

    +4.3.1 Frame user attributes +

    +The function 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 `numbered' attribute, which causes +numbers to be displayed on the tabs. -

    -4.3.1 Extra fields for style frame +

    + +

    +4.3.2 Extra fields for style `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. +

    @@ -651,8 +681,8 @@ engine configuration file. @@ -663,14 +693,17 @@ engine configuration file. + interval $(0, 1]$.
    Field
    bar Controls the style of the tab-bar. Possible values - are the strings "none", "inside", "outside" - and "shaped", with the last providing the PWM-style + are the strings `none', `inside', `outside' + and `shaped', with the last providing the PWM-style tab-bars for floating frames.
    floatframe_tab_min_w
    floatframe_bar_max_w_q Maximum tab-bar width quotient of frame width for the shaped styles. A number in the - interval .

    -

    -4.3.2 Extra fields for style dock +

    +4.3.3 Extra fields for style `dock'

    @@ -680,12 +713,12 @@ engine configuration file. outline_style How borders are drawn: - "none" - no border, - "all" - border around whole dock, - "each" - border around each dockapp. + `none' - no border, + `all' - border around whole dock, + `each' - border around each dockapp. tile_size -A table with entries width and height, +A table with entries `width' and `height', indicating the width and height of tiles in pixels. @@ -699,31 +732,31 @@ style configuration files.

    diff --git a/doc/ionconf/node6.html b/doc/ionconf/node6.html index 17e8f34..88aa9be 100644 --- a/doc/ionconf/node6.html +++ b/doc/ionconf/node6.html @@ -28,31 +28,31 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -61,20 +61,20 @@ original version by: Nikos Drakos, CBLU, University of Leeds Subsections @@ -89,7 +89,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    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 3. +the basic configuration explained in chapter 3.

    @@ -101,16 +101,16 @@ the basic configuration exlained in chapter 3 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 true is returned, remaining handlers are not called.

    Hook handlers are registered by first finding the hook -with ioncore.get_hook and then calling WHook.add -on the (succesfull) result with the handler as parameter. Similarly -handlers are unregistered with WHook.remove. For example: +with ioncore.get_hook and then calling WHook.add +on the (successful) result with the handler as parameter. Similarly +handlers are unregistered with WHook.remove. For example:

    @@ -125,7 +125,7 @@ handlers do. The types of parameters for each hook are listed in
     the hook reference, section 6.9.
     
     

    -Note that many of the hooks are called in ''protected mode'' and can not +Note that many of the hooks are called in ``protected mode'' and can not use any functions that modify Ion's internal state. TODO: More detailed documentation when this is final. @@ -142,7 +142,7 @@ documentation when this is final.

    -All Ion objects are passed to Lua scriptss as 'userdatas', and you may +All Ion objects are passed to Lua scripts as 'userdatas', and you may safely store such object references for future use. The C-side object may be destroyed while Lua still refers to the object. All exported functions gracefully fail in such a case, but if you need to explicitly @@ -219,8 +219,10 @@ and ioncore.x_get_text_p

    -

    -5.4 Writing ion-statusd monitors +

    + +
    +5.4 Writing ion-statusd monitors

    @@ -228,11 +230,11 @@ All statusbar meters that do not monitor the internal state of Ion should go in the separate ion-statusd program.

    -Whenever the user requests a meter %foo or %foo_bar to be -inserted in a statusbar, mod_statusbar asks ion-statusd to -load statusd_foo.lua on its search path (same as that for Ion-side +Whenever the user requests a meter `%foo' or `%foo_bar' to +be inserted in a statusbar, mod_statusbar asks ion-statusd +to load 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 -'foo'. +`foo'.

    To provide this value, the script should simply call statusd.inform @@ -241,11 +243,11 @@ Additionally the script should provide a 'template' for the meter to facilitate expected width calculation by 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 normal, important and -critical hints. +stock styles support the `normal', `important' and +`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:

    @@ -319,31 +321,31 @@ local settings=table.join(statusd.get_config("foo"), defaults)

    diff --git a/doc/ionconf/node7.html b/doc/ionconf/node7.html index 9b8b3e3..11dd84a 100644 --- a/doc/ionconf/node7.html +++ b/doc/ionconf/node7.html @@ -28,31 +28,31 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -61,97 +61,106 @@ original version by: Nikos Drakos, CBLU, University of Leeds Subsections +
  • 6.10 Miscellaneous +
    @@ -170,9 +179,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds
  • -
    - - +
    Synopsis:
    ioncore.TR(s, ...) @@ -187,9 +194,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    -
    - - +
    Synopsis:
    ioncore.bdoc(text) @@ -205,9 +210,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    -
    - - +
    Synopsis:
    ioncore.chdir_for(reg, dir) @@ -222,9 +225,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    -
    - - +
    Synopsis:
    ioncore.compile_cmd(cmd, guard) @@ -249,9 +250,22 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    +
    +
    Synopsis:
    +
    WTimer ioncore.create_timer() + +
    +
    Description:
    +
    Create a new timer. + +
    +
    + +

    + +

    +
    Synopsis:
    ioncore.create_ws(scr, tmpl, layout) @@ -268,9 +282,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.defbindings(context, bindings) @@ -287,9 +299,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.defctxmenu(ctx, ...) @@ -305,9 +315,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.deflayout(name, tab) @@ -324,9 +332,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.defmenu(name, tab) @@ -343,9 +349,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.defwinprop(list) @@ -360,9 +364,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.exec_on(reg, cmd, merr_internal) @@ -383,9 +385,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    table ioncore.read_savefile(string basename) @@ -400,9 +400,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    string ioncore.get_savefile(string basename) @@ -418,9 +416,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    string ioncore.lookup_script(string file, string sp) @@ -436,9 +432,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    bool ioncore.write_savefile(string basename, table tab) @@ -454,9 +448,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.find_manager(obj, t) @@ -472,9 +464,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.get_dir_for(reg) @@ -489,9 +479,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.getbindings(maybe_context) @@ -506,9 +494,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.getctxmenu(name) @@ -523,9 +509,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.getlayout(name, all) @@ -541,9 +525,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.getmenu(name) @@ -558,9 +540,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    ioncore.getwinprop(cwin) @@ -575,9 +555,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    string ioncore.aboutmsg() @@ -592,16 +570,14 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    WRegion ioncore.activity_first()
    Description:
    -
    Return first regio non activity list. +
    Returns first region on activity list.
    @@ -609,9 +585,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    bool ioncore.activity_i(function iterfn) @@ -628,9 +602,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    bool ioncore.clientwin_i(function fn) @@ -647,9 +619,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    WRegion ioncore.current() @@ -664,9 +634,7 @@ The string guard maybe set to pose limits on _sub. Currently

    -
    - - +
    Synopsis:
    bool ioncore.defshortening(string rx, string rule, bool always) @@ -718,9 +686,7 @@ Similarly to sed's 's' command, rule may contain characters that are

    -
    - - +
    Synopsis:
    bool ioncore.detach(WRegion reg, string how) @@ -728,11 +694,12 @@ Similarly to sed's 's' command, rule may contain characters that are
    Description:
    Detach or reattach reg, depending on whether how - is 'set'/'unset'/'toggle'. (Detaching means making reg - managed by its nearest ancestor WGroup, framed if reg is - not itself WFrame. Reattaching means making it managed where - it used to be managed, if a return-placeholder exists.) - If reg is the 'bottom' of some group, the whole group is + is `set', `unset' or `toggle'. (Detaching + means making reg managed by its nearest ancestor WGroup, + framed if reg is not itself WFrame. Reattaching means + making it managed where it used to be managed, if a return-placeholder + exists.) + If reg is the `bottom' of some group, the whole group is detached. If reg is a WWindow, it is put into a frame. @@ -742,9 +709,7 @@ Similarly to sed's 's' command, rule may contain characters that are

    -
    - - +
    Synopsis:
    integer ioncore.exec(string cmd) @@ -762,9 +727,7 @@ Similarly to sed's 's' command, rule may contain characters that are

    -
    - - +
    Synopsis:
    WScreen ioncore.find_screen_id(integer id) @@ -779,9 +742,7 @@ Similarly to sed's 's' command, rule may contain characters that are

    -
    - - +
    Synopsis:
    bool ioncore.focushistory_i(function iterfn) @@ -798,9 +759,7 @@ Similarly to sed's 's' command, rule may contain characters that are

    -
    - - +
    Synopsis:
    table ioncore.get() @@ -815,16 +774,15 @@ Similarly to sed's 's' command, rule may contain characters that are

    -
    - - +
    Synopsis:
    table ioncore.get_paths(table tab)
    Description:
    -
    Get important directories (userdir, sessiondir, searchpath). +
    Get important directories (the fields userdir, + sessiondir, searchpath in the returned table).
    @@ -832,9 +790,7 @@ Similarly to sed's 's' command, rule may contain characters that are

    -
    - - +
    Synopsis:
    bool ioncore.goto_activity() @@ -849,20 +805,17 @@ Similarly to sed's 's' command, rule may contain characters that are

    -
    - - +
    Synopsis:
    WRegion ioncore.goto_first(WRegion reg, string dirstr, table param)
    Description:
    -
    Go to first region within reg in direction dirstr - (up/down/left/right/beg/end/any). For information on param, - see ioncore.navi_next. Additionally this function supports - the boolean nofront field, for not bringing the object to - front. +
    Go to first region within reg in direction dirstr. + For information on param, see ioncore.navi_next. + Additionally this function supports the boolean nofront field, + for not bringing the object to front.
    @@ -870,20 +823,17 @@ Similarly to sed's 's' command, rule may contain characters that are

    -
    - - +
    Synopsis:
    WRegion ioncore.goto_next(WRegion reg, string dirstr, table param)
    Description:
    -
    Go to region next from reg in direction dirstr - (up/down/left/right/next/prev/any). For information on param, - see ioncore.navi_next. Additionally this function supports - the boolean nofront field, for not bringing the object to - front. +
    Go to region next from reg in direction dirstr. + For information on param, see ioncore.navi_next. + Additionally this function supports the boolean nofront + field, for not bringing the object to front.
    @@ -891,9 +841,7 @@ Similarly to sed's 's' command, rule may contain characters that are

    -
    - - +
    Synopsis:
    WScreen ioncore.goto_next_screen() @@ -912,9 +860,7 @@ Note that this function is asynchronous; the screen will not

    -
    - - +
    Synopsis:
    WScreen ioncore.goto_nth_screen(integer id) @@ -933,9 +879,7 @@ Note that this function is asynchronous; the screen will not

    -
    - - +
    Synopsis:
    WScreen ioncore.goto_prev_screen() @@ -954,9 +898,7 @@ Note that this function is asynchronous; the screen will not

    -
    - - +
    Synopsis:
    WRegion ioncore.goto_previous() @@ -975,9 +917,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool ioncore.is_i18n() @@ -992,9 +932,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool ioncore.load_module(string modname) @@ -1009,9 +947,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WClientWin ioncore.lookup_clientwin(string name) @@ -1026,9 +962,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WRegion ioncore.lookup_region(string name, string typenam) @@ -1044,18 +978,15 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WRegion ioncore.navi_first(WRegion reg, string dirstr, table param)
    Description:
    -
    Find first region within reg in direction dirstr - (up/down/left/right/beg/end/any). For information on param, - see ioncore.navi_next. +
    Find first region within reg in direction dirstr. + For information on param, see ioncore.navi_next.
    @@ -1063,9 +994,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WRegion ioncore.navi_next(WRegion reg, string dirstr, table param) @@ -1073,8 +1002,9 @@ Note that this function is asynchronous; the region will not
    Description:
    Find region next from reg in direction dirstr - (up/down/left/right/next/prev/any). The table param may - contain the boolean field nowrap, instructing not to wrap + (`up', `down', `left', `right', + `next', `prev', or `any'). The table param + may contain the boolean field nowrap, instructing not to wrap around, and the WRegions no_ascend and no_descend, and boolean functions ascend_filter and descend_filter on WRegion pairs (to, from), are used to decide when @@ -1086,9 +1016,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    integer ioncore.popen_bgread(string cmd, function h, function errh) @@ -1105,9 +1033,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    string ioncore.progname() @@ -1122,9 +1048,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool ioncore.region_i(function fn, string typenam) @@ -1142,9 +1066,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void ioncore.request_selection(function fn) @@ -1160,9 +1082,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void ioncore.resign() @@ -1178,9 +1098,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void ioncore.restart() @@ -1195,9 +1113,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void ioncore.restart_other(string cmd) @@ -1212,9 +1128,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void ioncore.set(table tab) @@ -1250,7 +1164,8 @@ Note that this function is asynchronous; the region will not 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'' + `last', `next', (for after current), + or `next-act' (for after current and anything with activity right after it). @@ -1279,11 +1194,13 @@ Note that this function is asynchronous; the region will not 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''. + One of `udlr' (up-down, then left-right), + `lrud' (left-right, then up-down), or + `random'. mousefocus -String: ''disable'' or ''sloppy''. +(string) Mouse focus mode: + `disable' or `sloppy'. unsqueeze (boolean) Auto-unsqueeze transients/menus/queries/etc. @@ -1308,16 +1225,15 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    bool ioncore.set_paths(table tab)
    Description:
    -
    Set important directories (sessiondir, searchpath). +
    Set important directories (the fields sessiondir, searchpath + of tab).
    @@ -1325,9 +1241,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void ioncore.set_selection(string p) @@ -1342,9 +1256,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void ioncore.shutdown() @@ -1359,9 +1271,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void ioncore.snapshot() @@ -1376,9 +1286,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void ioncore.tagged_clear() @@ -1393,16 +1301,14 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    WRegion ioncore.tagged_first(bool untag)
    Description:
    -
    Returns first tagged object, untagging it as well if untagis set. +
    Returns first tagged object, untagging it as well if untag is set.
    @@ -1410,9 +1316,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    bool ioncore.tagged_i(function iterfn) @@ -1429,9 +1333,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void ioncore.unsqueeze(WRegion reg, bool override) @@ -1449,9 +1351,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    string ioncore.version() @@ -1466,9 +1366,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void ioncore.warn(string str) @@ -1484,9 +1382,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void ioncore.warn_traced(string str) @@ -1501,9 +1397,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void ioncore.x_change_property(integer win, integer atom, integer atom_type, integer format, string mode, table tab) @@ -1511,7 +1405,7 @@ When a keyboard resize function is called, and at most kbresize_t_max
    Description:
    Modify a window property. The mode is one of - "replace", "prepend" or "append", and format + `replace', `prepend' or `append', and format is either 8, 16 or 32. Also see ioncore.x_get_window_property and the XChangeProperty(3) manual page. @@ -1521,9 +1415,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void ioncore.x_delete_property(integer win, integer atom) @@ -1538,9 +1430,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    string ioncore.x_get_atom_name(integer atom) @@ -1556,17 +1446,14 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    table ioncore.x_get_text_property(integer win, integer atom)
    Description:
    -
    Get a text property for a window (STRING, COMPOUND_TEXT, - or 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 XGetTextProperty(3) manual page for more information. @@ -1576,9 +1463,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    table ioncore.x_get_window_property(integer win, integer atom, integer atom_type, integer n32expected, bool more) @@ -1598,9 +1483,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    integer ioncore.x_intern_atom(string name, bool only_if_exists) @@ -1615,9 +1498,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void ioncore.x_set_text_property(integer win, integer atom, table tab) @@ -1634,9 +1515,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    ioncore.kpress(keyspec, cmd, guard) @@ -1653,9 +1532,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    ioncore.kpress_wait(keyspec, cmd, guard) @@ -1673,12 +1550,40 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    +
    +
    Synopsis:
    +
    bool ioncore.defer(function fn) + +
    +
    Description:
    +
    Defer execution of fn until the main loop. + +
    +
    + +

    + +

    +
    Synopsis:
    -
    ioncore.match_winprop_name(prop, cwin) +
    WHook ioncore.get_hook(string name) + +
    +
    Description:
    +
    Find named hook name. + +
    +
    + +

    + +

    +
    +
    +
    Synopsis:
    +
    ioncore.match_winprop_dflt(prop, cwin, id)
    Description:
    @@ -1690,9 +1595,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    ioncore.mclick(buttonspec, cmd, guard) @@ -1710,9 +1613,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    ioncore.mdblclick(buttonspec, cmd, guard) @@ -1728,9 +1629,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    ioncore.mdrag(buttonspec, cmd, guard) @@ -1749,9 +1648,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    ioncore.menuentry(name, cmd, guard_or_opts) @@ -1773,9 +1670,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    ioncore.mpress(buttonspec, cmd, guard) @@ -1791,9 +1686,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    ioncore.refresh_stylelist() @@ -1808,9 +1701,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    ioncore.submap(kcb_, list) @@ -1828,9 +1719,37 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    +
    +
    Synopsis:
    +
    ioncore.submap_enter(cmd, guard) + +
    +
    Description:
    +
    Submap enter event for bindings. + +
    +
    + +

    + +

    +
    +
    +
    Synopsis:
    +
    ioncore.submap_wait(cmd, guard) + +
    +
    Description:
    +
    Submap modifier release event for bindings. + +
    +
    + +

    + +

    +
    Synopsis:
    ioncore.submenu(name, sub_or_name, options) @@ -1851,9 +1770,40 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    +
    +
    Synopsis:
    +
    ioncore.tabnum.clear() + +
    +
    Description:
    +
    Clear all tab numbers set by ioncore.tabnum.show. + +
    +
    + +

    + +

    +
    +
    +
    Synopsis:
    +
    ioncore.tabnum.show(frame, delay) + +
    +
    Description:
    +
    Show tab numbers on frame, clearing them when submap + grab is released the next time. If delay is given, in + milliseconds, the numbers are not actually displayed until this + time has passed. + +
    +
    + +

    + +

    +
    Synopsis:
    ioncore.tagged_attach(reg, param) @@ -1877,9 +1827,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    table WClientWin.get_ident(WClientWin cwin) @@ -1897,17 +1845,15 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void WClientWin.kill(WClientWin cwin)
    Description:
    -
    Attempt to kill (with XKillWindow) the client that owns the X - window correspoding to cwin. +
    Attempt to kill (with XKillWindow) the client that owns + the X window correspoding to cwin.
    @@ -1915,9 +1861,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void WClientWin.nudge(WClientWin cwin) @@ -1933,9 +1877,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void WClientWin.quote_next(WClientWin cwin) @@ -1950,9 +1892,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    double WClientWin.xid(WClientWin cwin) @@ -1973,9 +1913,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    bool WFrame.is_shaded(WFrame frame) @@ -1990,9 +1928,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void WFrame.maximize_horiz(WFrame frame) @@ -2007,9 +1943,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void WFrame.maximize_vert(WFrame frame) @@ -2024,9 +1958,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    string WFrame.mode(WFrame frame) @@ -2041,9 +1973,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void WFrame.p_switch_tab(WFrame frame) @@ -2059,9 +1989,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    void WFrame.p_tabdrag(WFrame frame) @@ -2070,7 +1998,7 @@ When a keyboard resize function is called, and at most kbresize_t_max
    Description:
    Start dragging the tab that the user pressed on with the pointing device. This function should only be used by binding it to mpress or - mdrag action with area ''tab''. + mdrag action with area `tab'.
    @@ -2078,16 +2006,16 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    -
    bool WFrame.set_mode(WFrame frame, string modestr) +
    bool WFrame.set_grattr(WFrame frame, string attr, string how)
    Description:
    -
    Set frame mode. +
    Set extra drawing engine attributes for the frame. + The parameter attr is the attribute, and how is + one of `set', `unset', or `toggle'.
    @@ -2095,18 +2023,14 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    -
    bool WFrame.set_numbers(WFrame frame, string how) +
    bool WFrame.set_mode(WFrame frame, string modestr)
    Description:
    -
    Control whether tabs show numbers (set/unset/toggle). - Resulting state is returned, which may not be what was - requested. +
    Set frame mode.
    @@ -2114,9 +2038,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    bool WFrame.set_shaded(WFrame frame, string how) @@ -2124,7 +2046,8 @@ When a keyboard resize function is called, and at most kbresize_t_max
    Description:
    Set shading state according to the parameter how - (set/unset/toggle). Resulting state is returned, which may not be + (`set', `unset', or `toggle'). + Resulting state is returned, which may not be what was requested.
    @@ -2139,9 +2062,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    WRegion WGroup.attach(WGroup ws, WRegion reg, table param) @@ -2158,9 +2079,7 @@ When a keyboard resize function is called, and at most kbresize_t_max

    -
    - - +
    Synopsis:
    WRegion WGroup.attach_new(WGroup ws, table param) @@ -2176,22 +2095,22 @@ When a keyboard resize function is called, and at most kbresize_t_max Description type -Class name (a string) of the object to be created. Mandatory. +(string) Class of the object to be created. Mandatory. name -Name of the object to be created (a string). Optional. +(string) Name of the object to be created. switchto -Should the region be switched to (boolean)? Optional. +(boolean) Should the region be switched to? level -Stacking level; default is 1. +(integer) Stacking level; default is 1. modal -Make object modal; ignored if level is set. +(boolean) Make object modal; ignored if level is set. sizepolicy -Size policy. +(string) Size policy; see Section 6.10.1. @@ -2205,16 +2124,14 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    WRegion WGroup.bottom(WGroup ws)
    Description:
    -
    Returns the 'bottom' of ws. +
    Returns the `bottom' of ws.
    @@ -2222,9 +2139,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    bool WGroup.is_fullscreen(WGroup grp) @@ -2239,9 +2154,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    bool WGroup.managed_i(WGroup ws, function iterfn) @@ -2259,16 +2172,14 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    bool WGroup.set_bottom(WGroup ws, WRegion reg)
    Description:
    -
    Sets the 'bottom' of ws. The region reg must already +
    Sets the `bottom' of ws. The region reg must already be managed by ws, unless nil.
    @@ -2277,9 +2188,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    bool WGroup.set_fullscreen(WGroup grp, string how) @@ -2287,8 +2196,9 @@ In addition parameters to the region to be created are passed in this
    Description:
    Set client window reg full screen state according to the - parameter how (set/unset/toggle). Resulting state is returned, - which may not be what was requested. + parameter how (one of `set', `unset', or + `toggle'). Resulting state is returned, which may not be + what was requested.
    @@ -2308,9 +2218,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    bool WGroupWS.attach_framed(WGroupWS ws, WRegion reg, table t) @@ -2341,15 +2249,66 @@ In addition parameters to the region to be created are passed in this

    -6.1.6 WInfoWin functions +6.1.6 WHook functions +

    + +

    + +

    +
    +
    +
    Synopsis:
    +
    bool WHook.add(WHook hk, function efn) + +
    +
    Description:
    +
    Add efn to the list of functions to be called when the + hook hk is triggered. + +
    +
    + +

    + +

    +
    +
    +
    Synopsis:
    +
    bool WHook.listed(WHook hk, function efn) + +
    +
    Description:
    +
    Is fn hooked to hook hk? + +
    +
    + +

    + +

    +
    +
    +
    Synopsis:
    +
    bool WHook.remove(WHook hk, function efn) + +
    +
    Description:
    +
    Remove efn from the list of functions to be called when the + hook hk is triggered. + +
    +
    + +

    + +

    +6.1.7 WInfoWin functions

    -
    - - +
    Synopsis:
    void WInfoWin.set_text(WInfoWin p, string str, integer maxw) @@ -2363,16 +2322,14 @@ In addition parameters to the region to be created are passed in this

    -

    -6.1.7 WMPlex functions +

    +6.1.8 WMPlex functions

    -
    - - +
    Synopsis:
    WRegion WMPlex.attach(WMPlex mplex, WRegion reg, table param) @@ -2389,9 +2346,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    WRegion WMPlex.attach_new(WMPlex mplex, table param) @@ -2434,8 +2389,14 @@ In addition parameters to the region to be created are passed in this by e.g. the mutually exclusive list being empty. This option overrides switchto. +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. + sizepolicy -(integer) Size policy. +(string) Size policy; see Section 6.10.1. geom (table) Geometry specification. @@ -2452,16 +2413,14 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    void WMPlex.dec_index(WMPlex mplex, WRegion r)
    Description:
    -
    Move r ''right'' within objects managed by mplex on list 1. +
    Move r ``left'' within objects managed by mplex on list 1.
    @@ -2469,9 +2428,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    integer WMPlex.get_index(WMPlex mplex, WRegion reg) @@ -2488,9 +2445,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    table WMPlex.get_stdisp(WMPlex mplex) @@ -2506,16 +2461,14 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    void WMPlex.inc_index(WMPlex mplex, WRegion r)
    Description:
    -
    Move r ''right'' within objects managed by mplex on list 1. +
    Move r ``right'' within objects managed by mplex on list 1.
    @@ -2523,9 +2476,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    bool WMPlex.is_hidden(WMPlex mplex, WRegion reg) @@ -2540,9 +2491,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    bool WMPlex.managed_i(WMPlex mplex, function iterfn) @@ -2560,9 +2509,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    integer WMPlex.mx_count(WMPlex mplex) @@ -2577,9 +2524,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    WRegion WMPlex.mx_current(WMPlex mplex) @@ -2595,9 +2540,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    bool WMPlex.mx_i(WMPlex mplex, function iterfn) @@ -2615,9 +2558,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    WRegion WMPlex.mx_nth(WMPlex mplex, integer n) @@ -2633,9 +2574,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    bool WMPlex.set_hidden(WMPlex mplex, WRegion reg, string how) @@ -2643,7 +2582,8 @@ In addition parameters to the region to be created are passed in this
    Description:
    Set the visibility of the region reg on mplex - as specified with the parameter how (set/unset/toggle). + as specified with the parameter how + (one of `set', `unset', or `toggle'). The resulting state is returned.
    @@ -2652,9 +2592,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    void WMPlex.set_index(WMPlex mplex, WRegion reg, integer index) @@ -2664,10 +2602,16 @@ In addition parameters to the region to be created are passed in this
    Set index of reg to index within the mutually exclusive list of mplex. Special values for index are: - + - +
    $-1$ Last.
    $-2$ After WMPlex.mx_current.
    @@ -2678,9 +2622,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    WRegion WMPlex.set_stdisp(WMPlex mplex, table t) @@ -2699,14 +2641,15 @@ In addition parameters to the region to be created are passed in this pos The corner of the screen to place the status display - in. One of tl, tr, bl or br. + in: one of `tl', `tr', `bl' + or `br'. action -If this field is set to keep, corner +If this field is set to `keep', corner and orientation are changed for the existing - status display. If this field is set to remove, + status display. If this field is set to `remove', the existing status display is removed. If this - field is not set or is set to replace, a + field is not set or is set to `replace', a new status display is created and the old, if any, removed. @@ -2718,9 +2661,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    void WMPlex.switch_next(WMPlex mplex) @@ -2736,9 +2677,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    void WMPlex.switch_nth(WMPlex mplex, integer n) @@ -2753,9 +2692,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    void WMPlex.switch_prev(WMPlex mplex) @@ -2770,16 +2707,14 @@ In addition parameters to the region to be created are passed in this

    -

    -6.1.8 WMoveresMode functions +

    +6.1.9 WMoveresMode functions

    -
    - - +
    Synopsis:
    void WMoveresMode.cancel(WMoveresMode mode) @@ -2795,9 +2730,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    void WMoveresMode.finish(WMoveresMode mode) @@ -2813,9 +2746,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    table WMoveresMode.geom(WMoveresMode mode) @@ -2830,9 +2761,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    void WMoveresMode.move(WMoveresMode mode, integer horizmul, integer vertmul) @@ -2863,9 +2792,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    void WMoveresMode.resize(WMoveresMode mode, integer left, integer right, integer top, integer bottom) @@ -2883,9 +2810,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    table WMoveresMode.rqgeom(WMoveresMode mode, table g) @@ -2900,16 +2825,14 @@ In addition parameters to the region to be created are passed in this

    -

    -6.1.9 WRegion functions +

    +6.1.10 WRegion functions

    -
    - - +
    Synopsis:
    WMoveresMode WRegion.begin_kbresize(WRegion reg) @@ -2929,16 +2852,14 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    WRegion WRegion.current(WRegion mgr)
    Description:
    -
    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 mplex.
    @@ -2947,9 +2868,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    table WRegion.geom(WRegion reg) @@ -2965,9 +2884,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    table WRegion.get_configuration(WRegion reg, bool clientwins) @@ -2983,9 +2900,7 @@ In addition parameters to the region to be created are passed in this

    -
    - - +
    Synopsis:
    bool WRegion.goto(WRegion reg) @@ -3005,9 +2920,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WRegion WRegion.groupleader_of(WRegion reg) @@ -3023,9 +2936,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WRegion.is_active(WRegion reg) @@ -3040,9 +2951,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WRegion.is_activity(WRegion reg) @@ -3057,9 +2966,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WRegion.is_mapped(WRegion reg) @@ -3074,9 +2981,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WRegion.is_tagged(WRegion reg) @@ -3091,9 +2996,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WRegion WRegion.manager(WRegion reg) @@ -3108,9 +3011,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    string WRegion.name(WRegion reg) @@ -3125,9 +3026,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WWindow WRegion.parent(WRegion reg) @@ -3142,9 +3041,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WRootWin WRegion.rootwin_of(WRegion reg) @@ -3159,9 +3056,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WRegion.rqclose(WRegion reg, bool relocate) @@ -3174,8 +3069,8 @@ Note that this function is asynchronous; the region will not the client supports the WM_DELETE protocol (see also 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 relocate is not set, and - reg manages other regions, it will not be closed. Otherwise + use the `deinit' notification. If relocate is not set, + and reg manages other regions, it will not be closed. Otherwise the managed regions will be attempted to be relocated.
    @@ -3184,9 +3079,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WRegion WRegion.rqclose_propagate(WRegion reg, WRegion maybe_sub) @@ -3205,9 +3098,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    table WRegion.rqgeom(WRegion reg, table g) @@ -3225,9 +3116,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WRegion.rqorder(WRegion reg, string ord) @@ -3235,7 +3124,7 @@ Note that this function is asynchronous; the region will not
    Description:
    Request ordering. Currently supported values for ord - are 'front' and 'back'. + are `front' and `back'.
    @@ -3243,9 +3132,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WScreen WRegion.screen_of(WRegion reg) @@ -3260,17 +3147,15 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WRegion.set_activity(WRegion reg, string how)
    Description:
    -
    Set activity flag of reg. The how parameter most be - one of (set/unset/toggle). +
    Set activity flag of reg. The how parameter must be + one of `set', `unset' or `toggle'.
    @@ -3278,9 +3163,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WRegion.set_name(WRegion reg, string p) @@ -3288,7 +3171,7 @@ Note that this function is asynchronous; the region will not
    Description:
    Set the name of reg to p. If the name is already in use, - an instance number suffix <n> will be attempted. If p has + an instance number suffix `<n>' will be attempted. If p has such a suffix, it will be modified, otherwise such a suffix will be added. Setting p to nil will cause current name to be removed. @@ -3298,9 +3181,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WRegion.set_name_exact(WRegion reg, string p) @@ -3309,7 +3190,7 @@ Note that this function is asynchronous; the region will not
    Description:
    Similar to WRegion.set_name except if the name is already in use, other instance numbers will not be attempted. The string p should - not contain a <n> suffix or this function will fail. + not contain a `<n>' suffix or this function will fail.
    @@ -3317,9 +3198,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WRegion.set_tagged(WRegion reg, string how) @@ -3327,7 +3206,8 @@ Note that this function is asynchronous; the region will not
    Description:
    Change tagging state of reg as defined by how - (set/unset/toggle). Resulting state is returned. + (one of `set', `unset', or `toggle'). + The resulting state is returned.
    @@ -3335,9 +3215,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    table WRegion.size_hints(WRegion reg) @@ -3353,16 +3231,14 @@ Note that this function is asynchronous; the region will not

    -

    -6.1.10 WRootWin functions +

    +6.1.11 WRootWin functions

    -
    - - +
    Synopsis:
    WScreen WRootWin.current_scr(WRootWin rootwin) @@ -3376,16 +3252,14 @@ Note that this function is asynchronous; the region will not

    -

    -6.1.11 WScreen functions +

    +6.1.12 WScreen functions

    -
    - - +
    Synopsis:
    integer WScreen.id(WScreen scr) @@ -3400,9 +3274,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WScreen.set_managed_offset(WScreen scr, table offset) @@ -3419,16 +3291,65 @@ Note that this function is asynchronous; the region will not

    -

    -6.1.12 WWindow functions +

    +6.1.13 WTimer functions +

    + +

    + +

    +
    +
    +
    Synopsis:
    +
    bool WTimer.is_set(WTimer timer) + +
    +
    Description:
    +
    Is timer set? + +
    +
    + +

    + +

    +
    +
    +
    Synopsis:
    +
    void WTimer.reset(WTimer timer) + +
    +
    Description:
    +
    Reset timer. + +
    +
    + +

    + +

    +
    +
    +
    Synopsis:
    +
    void WTimer.set(WTimer timer, integer msecs, function fn) + +
    +
    Description:
    +
    Set timer to call fn in msecs milliseconds. + +
    +
    + +

    + +

    +6.1.14 WWindow functions

    -
    - - +
    Synopsis:
    void WWindow.p_move(WWindow wwin) @@ -3445,9 +3366,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WWindow.p_resize(WWindow wwin) @@ -3464,9 +3383,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    double WWindow.xid(WWindow wwin) @@ -3480,15 +3397,14 @@ Note that this function is asynchronous; the region will not

    -

    -6.1.13 global functions +

    +6.1.15 global functions

    -
    - +
    Synopsis:
    export(lib, ...) @@ -3502,23 +3418,21 @@ Note that this function is asynchronous; the region will not

    -

    -6.1.14 gr functions +

    +6.1.16 gr functions

    -
    - - +
    Synopsis:
    void gr.read_config()
    Description:
    -
    Read drawing engine configuration file draw.lua. +
    Read drawing engine configuration file look.lua.
    @@ -3526,9 +3440,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void gr.refresh() @@ -3543,16 +3455,14 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool gr.select_engine(string engine)
    Description:
    -
    Future requests for ''brushes'' are to be forwarded to the drawing engine +
    Future requests for ``brushes'' are to be forwarded to the drawing engine 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 @@ -3563,16 +3473,14 @@ Note that this function is asynchronous; the region will not

    -

    -6.1.15 string functions +

    +6.1.17 string functions

    -
    - - +
    Synopsis:
    string.shell_safe(str) @@ -3586,16 +3494,14 @@ Note that this function is asynchronous; the region will not

    -

    -6.1.16 table functions +

    +6.1.18 table functions

    -
    - - +
    Synopsis:
    table.append(t1, t2) @@ -3610,9 +3516,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    table.copy(t, deep) @@ -3628,9 +3532,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    table.icat(t1, t2) @@ -3645,9 +3547,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    table.join(t1, t2) @@ -3663,9 +3563,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    table.map(f, t) @@ -3686,9 +3584,7 @@ Note that this function is asynchronous; the region will not
    -
    - - +
    Synopsis:
    table mod_tiling.get() @@ -3703,9 +3599,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool mod_tiling.mkbottom(WRegion reg) @@ -3721,9 +3615,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void mod_tiling.set(table tab) @@ -3739,9 +3631,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool mod_tiling.untile(WTiling tiling) @@ -3763,9 +3653,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    table WSplit.geom(WSplit split) @@ -3780,9 +3668,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WSplitInner WSplit.parent(WSplit split) @@ -3797,9 +3683,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    table WSplit.rqgeom(WSplit node, table g) @@ -3816,9 +3700,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WSplit.transpose(WSplit node) @@ -3839,9 +3721,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WSplit WSplitInner.current(WSplitInner node) @@ -3862,9 +3742,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WRegion WSplitRegion.reg(WSplitRegion node) @@ -3885,9 +3763,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WSplit WSplitSplit.br(WSplitSplit split) @@ -3903,17 +3779,15 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    string WSplitSplit.dir(WSplitSplit split)
    Description:
    -
    Returns the direction of split; either ''vertical'' or - ''horizontal''. +
    Returns the direction of split; either `vertical' or + `horizontal'.
    @@ -3921,9 +3795,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WSplitSplit.flip(WSplitSplit split) @@ -3938,9 +3810,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WSplit WSplitSplit.tl(WSplitSplit split) @@ -3962,9 +3832,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WTiling.flip_at(WTiling ws, WRegion reg) @@ -3979,9 +3847,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WTiling.transpose_at(WTiling ws, WRegion reg) @@ -3996,9 +3862,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WRegion WTiling.farthest(WTiling ws, string dirstr, bool any) @@ -4007,8 +3871,8 @@ Note that this function is asynchronous; the region will not
    Description:
    Return the most previously active region on ws with no other regions next to it in direction dirstr - (left/right/up/down). If any is not set, the status - display is not considered. + (`left', `right', `up', or `down'). + If any is not set, the status display is not considered.
    @@ -4016,9 +3880,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WTiling.managed_i(WTiling ws, function iterfn) @@ -4036,9 +3898,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WRegion WTiling.nextto(WTiling ws, WRegion reg, string dirstr, bool any) @@ -4046,7 +3906,8 @@ Note that this function is asynchronous; the region will not
    Description:
    Return the most previously active region next to reg in - direction dirstr (left/right/up/down). The region reg + direction dirstr (`left', `right', `up', + or `down'). The region reg must be managed by ws. If any is not set, the status display is not considered. @@ -4056,9 +3917,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WSplitRegion WTiling.node_of(WTiling ws, WRegion reg) @@ -4074,9 +3933,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WTiling.set_floating_at(WTiling ws, WRegion reg, string how, string dirstr) @@ -4084,9 +3941,10 @@ Note that this function is asynchronous; the region will not
    Description:
    Toggle floating of the sides of a split containin reg as indicated - by the parameters how (set/unset/toggle) and dirstr - (left/right/up/down/any). The new status is returned (and false - also on error). + by the parameters how (`set', `unset', or + `toggle') and dirstr (`left', `right', + `up', or `down'). The new status is returned + (and false also on error).
    @@ -4094,9 +3952,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WSplitSplit WTiling.set_floating(WTiling ws, WSplitSplit split, string how) @@ -4104,8 +3960,8 @@ Note that this function is asynchronous; the region will not
    Description:
    Toggle floating of a split's sides at split as indicated by the - parameter how (set/unset/toggle). A split of the appropriate is - returned, if there was a change. + parameter how (`set', `unset', or `toggle'). + A split of the appropriate is returned, if there was a change.
    @@ -4113,18 +3969,17 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WFrame WTiling.split(WTiling ws, WSplit node, string dirstr)
    Description:
    -
    Create a new frame on ws above/below/left of/right of - node as indicated by dirstr. If dirstr is - prefixed with ''floating:'' a floating split is created. +
    Create a new frame on ws `above', `below' + `left' of, or `right' of node as indicated + by dirstr. If dirstr is prefixed with + `floating:' a floating split is created.
    @@ -4132,9 +3987,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WFrame WTiling.split_at(WTiling ws, WFrame frame, string dirstr, bool attach_current) @@ -4142,11 +3995,12 @@ Note that this function is asynchronous; the region will not
    Description:
    Split frame creating a new frame to direction dirstr - (one of ''left'', ''right'', ''top'' or ''bottom'') of frame. + (one of `left', `right', `top' or + `bottom') of frame. If attach_current is set, the region currently displayed in frame, if any, is moved to thenew frame. - If dirstr is prefixed with ''floating:'' a floating split is - created. + If dirstr is prefixed with `floating:', a floating + split is created.
    @@ -4154,9 +4008,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WFrame WTiling.split_top(WTiling ws, string dirstr) @@ -4171,9 +4023,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    WSplit WTiling.split_tree(WTiling ws) @@ -4188,9 +4038,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WTiling.unsplit_at(WTiling ws, WRegion reg) @@ -4212,9 +4060,7 @@ Note that this function is asynchronous; the region will not
    -
    - - +
    Synopsis:
    mod_query.defcmd(cmd, fn) @@ -4229,9 +4075,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.message(mplex, str) @@ -4246,9 +4090,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    table mod_query.get() @@ -4264,9 +4106,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void mod_query.history_clear() @@ -4281,9 +4121,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    string mod_query.history_get(integer n) @@ -4298,9 +4136,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool mod_query.history_push(string str) @@ -4315,9 +4151,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    integer mod_query.history_search(string s, integer from, bool bwd, bool exact) @@ -4336,9 +4170,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    table mod_query.history_table() @@ -4353,9 +4185,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void mod_query.set(table tab) @@ -4389,9 +4219,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.popen_completions(cp, cmd, fn, reshnd) @@ -4413,9 +4241,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query(mplex, prompt, initvalue, handler, completor, @@ -4440,18 +4266,16 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_attachclient(mplex)
    Description:
    -
    This query asks for the name of a client window and switches - focus to the one entered. It uses the completion function - 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 ioncore.complete_clientwin.
    @@ -4459,9 +4283,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_editfile(mplex, script, prompt) @@ -4478,9 +4300,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_exec(mplex) @@ -4499,18 +4319,16 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_gotoclient(mplex)
    Description:
    -
    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 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 + ioncore.complete_clientwin.
    @@ -4518,9 +4336,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_lua(mplex) @@ -4538,9 +4354,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_man(mplex, prog) @@ -4557,9 +4371,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_menu(mplex, sub, themenu, prompt) @@ -4574,9 +4386,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_renameframe(frame) @@ -4592,9 +4402,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_renameworkspace(mplex, ws) @@ -4611,9 +4419,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_restart(mplex) @@ -4629,9 +4435,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_runfile(mplex, script, prompt) @@ -4648,9 +4452,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_shutdown(mplex) @@ -4667,9 +4469,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_ssh(mplex, ssh) @@ -4685,9 +4485,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_workspace(mplex) @@ -4706,9 +4504,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.query_yesno(mplex, prompt, handler) @@ -4725,9 +4521,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.show_about_ion(mplex) @@ -4742,9 +4536,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.show_tree(mplex, reg, max_depth) @@ -4759,9 +4551,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    mod_query.warn(mplex, str) @@ -4782,9 +4572,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WComplProxy.set_completions(WComplProxy proxy, table compls) @@ -4809,9 +4597,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.back(WEdln wedln) @@ -4826,9 +4612,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.backspace(WEdln wedln) @@ -4843,9 +4627,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.bkill_word(WEdln wedln) @@ -4861,9 +4643,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.bol(WEdln wedln) @@ -4878,9 +4658,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.bskip_word(WEdln wedln) @@ -4896,9 +4674,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.clear_mark(WEdln wedln) @@ -4913,9 +4689,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.complete(WEdln wedln, string cycle, string mode) @@ -4924,11 +4698,12 @@ Note that this function is asynchronous; the region will not
    Description:
    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 cycle is set to ``next'' or ``prev'', - respectively. The mode may be ``history'' or ``normal''. If it is + auto-show-completions mode and cycle is set to `next' or + `prev', respectively. + The mode may be `history' or `normal'. If it is not set, the previous mode is used. Normally next entry is not cycled to despite the setting of cycle if mode switch occurs. To override - this, use ``next-always'' and ``prev-always'' for cycle. + this, use `next-always' and `prev-always' for cycle.
    @@ -4936,9 +4711,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    string WEdln.contents(WEdln wedln) @@ -4953,9 +4726,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    string WEdln.context(WEdln wedln) @@ -4970,9 +4741,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.copy(WEdln wedln) @@ -4987,9 +4756,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.cut(WEdln wedln) @@ -5005,9 +4772,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.delete(WEdln wedln) @@ -5022,9 +4787,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.eol(WEdln wedln) @@ -5039,9 +4802,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.finish(WEdln wedln) @@ -5056,9 +4817,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.forward(WEdln wedln) @@ -5073,9 +4832,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.history_next(WEdln wedln, bool match) @@ -5092,9 +4849,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.history_prev(WEdln wedln, bool match) @@ -5111,9 +4866,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.insstr(WEdln wedln, string str) @@ -5128,9 +4881,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WEdln.is_histcompl(WEdln wedln) @@ -5145,9 +4896,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.kill_line(WEdln wedln) @@ -5162,9 +4911,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.kill_to_bol(WEdln wedln) @@ -5179,9 +4926,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.kill_to_eol(WEdln wedln) @@ -5196,9 +4941,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.kill_word(WEdln wedln) @@ -5214,9 +4957,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    integer WEdln.mark(WEdln wedln) @@ -5233,9 +4974,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    bool WEdln.next_completion(WEdln wedln) @@ -5250,9 +4989,7 @@ Note that this function is asynchronous; the region will not

    -
    - - +
    Synopsis:
    void WEdln.paste(WEdln wedln) @@ -5272,9 +5009,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    integer WEdln.point(WEdln wedln) @@ -5290,9 +5025,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    bool WEdln.prev_completion(WEdln wedln) @@ -5307,9 +5040,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WEdln.set_context(WEdln wedln, string context) @@ -5324,9 +5055,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WEdln.set_mark(WEdln wedln) @@ -5341,9 +5070,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WEdln.skip_word(WEdln wedln) @@ -5359,9 +5086,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WEdln.transpose_chars(WEdln wedln) @@ -5376,9 +5101,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WEdln.transpose_words(WEdln wedln) @@ -5399,9 +5122,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WInput.cancel(WInput input) @@ -5416,9 +5137,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WInput.scrolldown(WInput input) @@ -5433,9 +5152,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WInput.scrollup(WInput input) @@ -5456,9 +5173,7 @@ Note that this function is asynchronous; the selection will not
    -
    - - +
    Synopsis:
    mod_menu.grabmenu(mplex, sub, menu_or_name, param) @@ -5475,9 +5190,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    mod_menu.menu(mplex, sub, menu_or_name, param) @@ -5502,9 +5215,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    table mod_menu.get() @@ -5519,9 +5230,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void mod_menu.set(table tab) @@ -5554,9 +5263,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    mod_menu.pmenu(win, sub, menu_or_name) @@ -5579,9 +5286,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WMenu.cancel(WMenu menu) @@ -5596,9 +5301,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WMenu.finish(WMenu menu) @@ -5614,9 +5317,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WMenu.select_next(WMenu menu) @@ -5631,9 +5332,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WMenu.select_nth(WMenu menu, integer n) @@ -5648,9 +5347,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WMenu.select_prev(WMenu menu) @@ -5665,9 +5362,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WMenu.typeahead_clear(WMenu menu) @@ -5688,9 +5383,7 @@ Note that this function is asynchronous; the selection will not
    -
    - - +
    Synopsis:
    void mod_dock.set_floating_shown_on(WMPlex mplex, string how) @@ -5711,9 +5404,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    bool WDock.attach(WDock dock, WRegion reg) @@ -5728,9 +5419,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    table WDock.get(WDock dock) @@ -5746,9 +5435,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WDock.resize(WDock dock) @@ -5763,9 +5450,7 @@ Note that this function is asynchronous; the selection will not

    -
    - - +
    Synopsis:
    void WDock.set(WDock dock, table conftab) @@ -5788,7 +5473,10 @@ Note that this function is asynchronous; the selection will not string in - +$\{t,m,b\}\times\{t,c,b\}$ Dock position. Can only be used in floating mode. @@ -5819,9 +5507,7 @@ Any parameters not explicitly set in conftab will be left unchanged.
    -
    - - +
    Synopsis:
    bool mod_sp.set_shown(WFrame sp, string how) @@ -5829,7 +5515,9 @@ Any parameters not explicitly set in conftab will be left unchanged.
    Description:
    Toggle displayed status of sp. - The parameter how is one of (set/unset/toggle). + The parameter how is one of + `set', `unset', or `toggle'. + The resulting status is returned.
    @@ -5837,9 +5525,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    bool mod_sp.set_shown_on(WMPlex mplex, string how) @@ -5847,7 +5533,9 @@ Any parameters not explicitly set in conftab will be left unchanged.
    Description:
    Change displayed status of some scratchpad on mplex if one is - found. The parameter how is one of (set/unset/toggle). + found. The parameter how is one of + `set', `unset', or `toggle'. + The resulting status is returned.
    @@ -5861,9 +5549,88 @@ Any parameters not explicitly set in conftab will be left unchanged.
    -
    - - +
    +
    +
    Synopsis:
    +
    mod_statusbar.create(param) + +
    +
    Description:
    +
    Create a statusbar. The possible parameters in the + table param are: + +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    VariableTypeDescription
    templatestringThe template; see + Section 3.6.
    posstringPosition: "tl", "tr", + "bl" or "br" + (for the obvious combinations of + top/left/bottom/right).
    screenintegerScreen number to create the statusbar on.
    fullsizebooleanIf set, the statusbar will waste + space instead of adapting to layout.
    systrayboolaenSwallow (KDE protocol) systray icons.
    + +

    +
    + +

    + +

    +
    +
    +
    Synopsis:
    +
    mod_statusbar.inform(name, value) + +
    +
    Description:
    +
    Inform of a value. + +
    +
    + +

    + +

    +
    +
    +
    Synopsis:
    +
    mod_statusbar.launch_statusd(cfg) + +
    +
    Description:
    +
    Load modules and launch ion-statusd with configuration + table cfg. The options for each ion-statusd monitor + script should be contained in the corresponding sub-table of cfg. + +
    +
    + +

    + +

    +
    Synopsis:
    table mod_statusbar.statusbars() @@ -5875,6 +5642,22 @@ Any parameters not explicitly set in conftab will be left unchanged.
    +

    + +

    +
    +
    +
    Synopsis:
    +
    mod_statusbar.update(update_templates) + +
    +
    Description:
    +
    Update statusbar contents. To be called after series + of mod_statusbar.inform calls. + +
    +
    +

    @@ -5884,9 +5667,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    table WStatusBar.get_template_table(WStatusBar sb) @@ -5901,12 +5682,10 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    -
    bool WStatusBar.is_systray_extl(WStatusBar sb) +
    bool WStatusBar.is_systray(WStatusBar sb)
    Description:
    @@ -5918,9 +5697,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    bool WStatusBar.set_systray(WStatusBar sb, string how) @@ -5928,7 +5705,8 @@ Any parameters not explicitly set in conftab will be left unchanged.
    Description:
    Enable or disable use of sb as systray. - The parameter how can be one of (set/unset/toggle). + The parameter how can be one of + `set', `unset', or `toggle'. Resulting state is returned.
    @@ -5937,9 +5715,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    void WStatusBar.set_template(WStatusBar sb, string tmpl) @@ -5954,9 +5730,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    void WStatusBar.set_template_table(WStatusBar sb, table t) @@ -5971,9 +5745,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    void WStatusBar.update(WStatusBar sb, table t) @@ -5994,9 +5766,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    bool de.defstyle(string name, table tab) @@ -6011,9 +5781,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    bool de.defstyle_rootwin(WRootWin rootwin, string name, table tab) @@ -6028,9 +5796,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    void de.reset() @@ -6045,9 +5811,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    - - +
    Synopsis:
    table de.substyle(string pattern, table tab) @@ -6070,7 +5834,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

    -
    +
    Hook name:
    @@ -6105,7 +5869,7 @@ Any parameters not explicitly set in conftab will be left unchanged. dockapp bool -Client window is a dockapp. +Client window is a dock-app. maprq bool @@ -6142,7 +5906,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6162,7 +5926,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6183,7 +5947,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6204,7 +5968,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6231,12 +5995,12 @@ reg:attach(cwin) mode string -"switchonly", "reorder", - "add" or "remove" +`switchonly', `reorder', + `add' or `remove' sw bool -Switch occured +Switch occurred sub WRegion @@ -6250,7 +6014,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6271,7 +6035,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6291,7 +6055,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6304,7 +6068,7 @@ reg:attach(cwin)
    Description:
    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.
    @@ -6312,7 +6076,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6332,7 +6096,27 @@ reg:attach(cwin)

    -
    +
    + +
    +
    Hook name:
    +
    ioncore_submap_ungrab_hook + +
    +
    Parameters:
    +
    () + +
    +
    Description:
    +
    This hook is used to signal whenever Ion leaves the submap grab mode. + +
    +
    + +

    + +

    +
    Hook name:
    @@ -6368,7 +6152,7 @@ reg:attach(cwin) res_frame WFrame -A succesfull handler should +A successful handler should return the target frame here. @@ -6384,7 +6168,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6405,7 +6189,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6427,7 +6211,7 @@ reg:attach(cwin)

    -
    +
    Hook name:
    @@ -6476,16 +6260,16 @@ reg:attach(cwin) Tagging state has changed. pseudoactivated -The region has become pseudoactive +The region has become pseudo-active (see below). pseudoinactivated -The region is no longer pseudoactive. +The region is no longer pseudo-active.

    -A region is pseudoactive, when a) it is itself not active (does +A region is pseudo-active, when a) it is itself not active (does not not have the focus, and may not even have a window that could have it), but b) some region managed by it is active. @@ -6496,35 +6280,96 @@ A region is pseudoactive, when a) it is itself not active (does

    +

    + +
    +6.10 Miscellaneous +

    + +

    + +

    + +
    +6.10.1 Size policies +

    + +

    +Some functions accept a sizepolicy parameter. The possible +values are: + +

    +

    +`default', +`full', +`full_bounds', +`free', +`free_glue', +`northwest', +`north', +`northeast', +`west', +`center', +`east', +`southwest', +`south', +`southeast', +`stretch_top', +`stretch_bottom', +`stretch_left', +`stretch_right', +`free_glue_northwest', +`free_glue_north', +`free_glue_northeast', +`free_glue_west', +`free_glue_center', +`free_glue_east', +`free_glue_southwest', +`free_glue_south', and +`free_glue_southeast'. + +
    + +

    +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. + +

    +

    diff --git a/doc/ionconf/node8.html b/doc/ionconf/node8.html index 555d7bf..33cb380 100644 --- a/doc/ionconf/node8.html +++ b/doc/ionconf/node8.html @@ -28,31 +28,31 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -61,7 +61,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds Subsections @@ -565,31 +565,31 @@ General Public License instead of this License. diff --git a/doc/ionconf/node9.html b/doc/ionconf/node9.html index 06f6690..0b16372 100644 --- a/doc/ionconf/node9.html +++ b/doc/ionconf/node9.html @@ -28,31 +28,31 @@ original version by: Nikos Drakos, CBLU, University of Leeds @@ -70,7 +70,6 @@ B. Full class hierarchy visible to Lua-side |-->WHook |-->WTimer |-->WMoveresMode - |-->WMgmtMode (mod_mgmtmode) |-->WRegion | |-->WClientWin | |-->WWindow diff --git a/doc/ionnotes.dvi.gz b/doc/ionnotes.dvi.gz index 1d53cb6..d69a4ee 100644 Binary files a/doc/ionnotes.dvi.gz and b/doc/ionnotes.dvi.gz differ diff --git a/doc/ionnotes.ps.gz b/doc/ionnotes.ps.gz index d83c4f9..1180c8a 100644 Binary files a/doc/ionnotes.ps.gz and b/doc/ionnotes.ps.gz differ diff --git a/doc/ionnotes.tex b/doc/ionnotes.tex index d8c10f3..c8f779d 100644 --- a/doc/ionnotes.tex +++ b/doc/ionnotes.tex @@ -30,7 +30,7 @@ the Free Software Foundation; either version 2 of the License, or This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -section entitled ''GNU General Public License'' for more details. +section entitled ``GNU General Public License'' for more details. \bigskip diff --git a/doc/ionnotes/index.html b/doc/ionnotes/index.html index 27c31f2..9ebfb0d 100644 --- a/doc/ionnotes/index.html +++ b/doc/ionnotes/index.html @@ -74,7 +74,7 @@ the Free Software Foundation; either version 2 of the License, or This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -section entitled ''GNU General Public License'' for more details. +section entitled ``GNU General Public License'' for more details.

    diff --git a/doc/ionnotes/ionnotes.css b/doc/ionnotes/ionnotes.css index d22be91..f0cd026 100644 --- a/doc/ionnotes/ionnotes.css +++ b/doc/ionnotes/ionnotes.css @@ -35,3 +35,4 @@ DIV.quote { } PRE.preform { } SPAN.textit { font-style: italic } SPAN.arabic { } +SPAN.textbf { font-weight: bold } diff --git a/doc/ionnotes/ionnotes.html b/doc/ionnotes/ionnotes.html index 27c31f2..9ebfb0d 100644 --- a/doc/ionnotes/ionnotes.html +++ b/doc/ionnotes/ionnotes.html @@ -74,7 +74,7 @@ the Free Software Foundation; either version 2 of the License, or This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -section entitled ''GNU General Public License'' for more details. +section entitled ``GNU General Public License'' for more details.

    diff --git a/doc/ionnotes/node2.html b/doc/ionnotes/node2.html index d181c54..4996b37 100644 --- a/doc/ionnotes/node2.html +++ b/doc/ionnotes/node2.html @@ -87,9 +87,9 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    While Ion does not not have a truly object-oriented design 1, + HREF="#foot210">1, things that appear on the computer screen are, however, quite -naturally expressed as such ''objects''. Therefore Ion implements +naturally expressed as such ``objects''. Therefore Ion implements a rather primitive OO system for these screen objects and some other things. @@ -107,7 +107,7 @@ basic relations.

    For simplicity we consider only the essential-for-basic-configuration Ioncore, mod_tiling and mod_query classes. -See Appendix [*] for the full class hierachy visible +See Appendix [*] for the full class hierarchy visible to Lua side.

    @@ -128,7 +128,7 @@ implement.

    -

    +
    Figure 1: Partial Ioncore, mod_tiling and mod_query @@ -160,77 +160,76 @@ The core classes:

    Obj
    -
    +
    Is the base of Ion's object system.

    WRegion
    -
    +
    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.

    WClientWin
    -
    is a class for +
    is a class for client window objects, the objects that window managers are supposed to manage.

    WWindow
    -
    is the base class for all +
    is the base class for all internal objects having an X window associated to them (WClientWins also have X windows associated to them). -

    -

    -
    WRootWin
    -
    is the class for - root windows of X screens. - Note that an ''X screen'' or root window is not necessarily a - single physical screen as a root window - may be split over multiple screens when hacks such as - Xinerama are used. (Actually there can be only - one root window when Xinerama is used.) -

    WMPlex
    -
    is a base class for all regions that''multiplex'' +
    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.

    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. +
    is an instance of WMPlex + for screens. + +

    +

    +
    WRootWin
    +
    is the class for + root windows of X screens. + It is an instance of WScreen. + Note that an ``X screen'' or root window is not necessarily a + single physical screen as a root window + may be split over multiple screens when ugly hacks such as + Xinerama are used. (Actually there can be only + one root window when Xinerama is used.)

    WFrame
    -
    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). +
    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).

    WGroup
    -
    is the base class for groups. +
    is the base class for groups. Particular types of groups are workspaces - (WGroupWS) + (WGroupWS) and groups of client windows - (WGroupCW). + (WGroupCW).
    @@ -240,12 +239,12 @@ Classes implemented by the mod_tiling module:

    WTiling
    -
    is the class for tilings +
    is the class for tilings of frames.
    WSplit
    -
    (or, more specifically, classes +
    (or, more specifically, classes that inherit it) encode the WTiling tree structure.
    @@ -256,26 +255,26 @@ Classes implemented by the mod_query module:

    WInput
    -
    is a virtual base class for the +
    is a virtual base class for the two classes below.
    WEdln
    -
    is the class for the ''queries'', +
    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.
    WMessage
    -
    implements the boxes for +
    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.

    -There are also some other ''proxy'' classes that do not refer +There are also some other ``proxy'' classes that do not refer to objects on the screen. The only important one of these for basic configuration is WMoveresMode that is used for binding callbacks in the move and resize mode. @@ -292,7 +291,7 @@ binding callbacks in the move and resize mode. 1.2.1 Parent-child relations Each object of type WRegion has a parent and possibly a manager -associated to it. The parent for an object is always a +associated to it. The parent for an object is always a WWindow and for WRegion with an X window (WClientWin, WWindow) the parent WWindow is given by the same relation of the X windows. For other WRegions the relation is not as clear. @@ -302,7 +301,7 @@ Figure 2.

    -

    +
    @@ -323,7 +322,7 @@ Most common parent-child relations

    WRegions have very little control over their children as a parent. -The manager WRegion has much more control over its +The manager WRegion has much more control over its managed WRegions. Managers, for example, handle resize requests, focusing and displaying of the managed regions. Indeed the manager--managed relationship gives a better picture of the logical ordering of objects on @@ -341,7 +340,7 @@ but all have a parent-a screen if not anything else.

    -

    +
    Figure 2: Most common parent-child relations
    @@ -405,7 +404,7 @@ consideration:



    Footnotes

    -
    ... design... design1
    the author doesn't like such artificial designs diff --git a/doc/ionnotes/node3.html b/doc/ionnotes/node3.html index 0309e19..63c9852 100644 --- a/doc/ionnotes/node3.html +++ b/doc/ionnotes/node3.html @@ -64,20 +64,20 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    First, to get things clear, what are considered objects here are C -structures containing a properly initialized +structures containing a properly initialised structure defined in 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 WObj structure contains a pointer -to a WObjDescr class type info structure and -a list of so called ''watches''. The WObjDescr structure simply +to a WObjDescr 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'').

    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 - structure) may be used to create safe references to + 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 diff --git a/doc/ionnotes/node4.html b/doc/ionnotes/node4.html index 1ae2bf7..41c8521 100644 --- a/doc/ionnotes/node4.html +++ b/doc/ionnotes/node4.html @@ -126,11 +126,11 @@ C side of Ion and Lua:

    - + - + @@ -195,7 +195,7 @@ initialisation and deinitialisation code.

    You've seen the terms level 1 and 2 call handler mentioned above. - + The Lua support code uses two so called call handlers to convert and check the types of parameters passed from Lua to C and back to Lua. The first one of these call handlers is the same for all exported functions and @@ -230,10 +230,10 @@ supported by the generated L2 call handlers).

    The functions -extl_call, -extl_call_named, -extl_dofile and -extl_dostring +extl_call, +extl_call_named, +extl_dofile and +extl_dostring call a referenced function (ExtlFn), named function, execute a string and a file, respectively. The rest of the parameters for all these functions are similar. The 'spec' argument is a string of identifier @@ -249,7 +249,7 @@ passing succeeded or not.

    Sometimes it is necessary to block calls to all but a limited set of Ion functions. This can be accomplished with -extl_set_safelist. +extl_set_safelist. The parameter to this function is a NULL-terminated array of strings and the return value is a similar old safelist. The call extl_set_safelist(NULL) removes any safelist and allows @@ -263,7 +263,7 @@ calls to all exported functions.

    Configuration files should be read as before with the function -read_config_for +read_config_for except that the list of known options is no longer present.

    diff --git a/doc/ionnotes/node5.html b/doc/ionnotes/node5.html index d3aba2e..45b1c29 100644 --- a/doc/ionnotes/node5.html +++ b/doc/ionnotes/node5.html @@ -83,10 +83,9 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    To keep Ion's code as simple as possible yet safe, there are restrictions when the WObj -destroy_obj +destroy_obj function that calls watches, the deinit routine and frees memory may -be called directly. In all other cases the -defer_destroy +be called directly. In all other cases the mainloop_defer_destroy function should be used to defer the call of destroy_obj until Ioncore returns to its main event loop. @@ -103,8 +102,7 @@ following cases: when the function created a frame to manage some other object but for some reason failed to reparent the object to this frame. -

  • In a deferred action handler set with - defer_action. +
  • In a deferred action handler set with mainloop_defer_action. Like deferred destroys, other deferred actions are called when Ioncore has returned to the main loop.
  • @@ -116,7 +114,7 @@ following cases:

    If there are no serious side effects from deferring destroying the object or you're unsure whether it is safe to destroy the object -immediately, use defer_destroy. +immediately, use mainloop_defer_destroy.

    @@ -145,7 +143,7 @@ parameters to functions.

    -
    Figure 3: Most common manager-managed relations
     
    tExtlTabExtlTab Reference to Lua table
    fExltFnExltFn Reference to Lua function.
    o
    char* The string is the caller's responsibility and it 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.
    diff --git a/doc/ionnotes/node6.html b/doc/ionnotes/node6.html index 8c20249..61cff1a 100644 --- a/doc/ionnotes/node6.html +++ b/doc/ionnotes/node6.html @@ -78,7 +78,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    -If you want to submit patches to Ion, you MUST follow my coding +If you want to submit patches to Ion, you 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 @@ -94,7 +94,7 @@ things to take note of.

      -
    • Indentations of 4 with tab size=4. +
    • Indentations of 4 with spaces.

    • diff --git a/doc/ionnotes/node8.html b/doc/ionnotes/node8.html index 6e12241..d14a7c0 100644 --- a/doc/ionnotes/node8.html +++ b/doc/ionnotes/node8.html @@ -58,77 +58,77 @@ original version by: Nikos Drakos, CBLU, University of Leeds Index
      call handler - : 3.2 -
      defer_action - : 4.1 -
      defer_destroy - : 4.1 + : 3.2
      destroy_obj - : 4.1 + : 4.1
      extl_call - : 3.3 + : 3.3
      extl_call_named - : 3.3 + : 3.3
      extl_dofile - : 3.3 + : 3.3
      extl_dostring - : 3.3 + : 3.3
      extl_set_safelist - : 3.3 + : 3.3
      ExtlFn - : 3.1 -
      ExtlTab : 3.1 +
      ExtlTab + : 3.1 +
      mainloop_defer_action + : 4.1 +
      mainloop_defer_destroy + : 4.1
      manager - : 1.2.1 + : 1.2.1
      Obj - : 1.1 + : 1.1
      parent - : 1.2.1 + : 1.2.1
      read_config_for - : 3.4 + : 3.4
      root window - : 1.1 + : 1.1
      screen
      -
      physical : 1.1 -
      X : 1.1 +
      physical : 1.1 +
      X : 1.1
      WClientWin - : 1.1 + : 1.1
      WEdln - : 1.1 + : 1.1
      WFrame - : 1.1 + : 1.1
      WGroup - : 1.1 + : 1.1
      WGroupCW - : 1.1 -
      WGroupWS : 1.1 +
      WGroupWS + : 1.1
      WInput - : 1.1 + : 1.1
      WMessage - : 1.1 + : 1.1
      WObj - : 2 + : 2
      WObjDescr - : 2 + : 2
      WRegion - : 1.1 + : 1.1
      WRootWin : 1.1
      WScreen - : 1.1 + : 1.1
      WSplit - : 1.1 -
      WTiling : 1.1 +
      WTiling + : 1.1
      WWatch - : 2 + : 2
      WWindow - : 1.1 + : 1.1
      Xinerama - : 1.1 + : 1.1
      diff --git a/doc/ionnotes/node9.html b/doc/ionnotes/node9.html index fd8126b..288d589 100644 --- a/doc/ionnotes/node9.html +++ b/doc/ionnotes/node9.html @@ -70,7 +70,7 @@ Mathematics Department, Macquarie University, Sydney. The command line arguments were:
      latex2html -show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 4 ionnotes

      -The translation was initiated by tuomov on 2007-03-18 +The translation was initiated by tuomov on 2007-05-06


      diff --git a/doc/macros.tex b/doc/macros.tex index 0e172d3..134aeed 100644 --- a/doc/macros.tex +++ b/doc/macros.tex @@ -17,8 +17,7 @@ % URL settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\urlstyle{rm} -\newcommand{\centerurl}[1]{\begin{center}\url{#1}\end{center}} +\urlstyle{tt} % listings package %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -47,6 +46,7 @@ %begin{latexonly} \newcommand{\key}[1]{\mbox{\textbf{#1}}} \newcommand{\code}[1]{\lstinline!#1!} +\newcommand{\codestr}[1]{`\texttt{#1}'} \newcommand{\var}[1]{\lstinline!#1!} \newcommand{\command}[1]{\lstinline!#1!} @@ -60,6 +60,7 @@ \newcommand{\key}[1]{\textbf{#1}} \newcommand{\code}[1]{\texttt{#1}} +\newcommand{\codestr}[1]{`\texttt{#1}'} \newcommand{\var}[1]{\texttt{#1}} \newcommand{\command}[1]{\texttt{#1}} diff --git a/doc/miscref.tex b/doc/miscref.tex new file mode 100644 index 0000000..44b0818 --- /dev/null +++ b/doc/miscref.tex @@ -0,0 +1,44 @@ + +\subsection{Size policies} +\label{sec:sizepolicies} + +Some functions accept a \var{sizepolicy} parameter. The possible +values are: + +\begin{flushleft} +\codestr{default}, +\codestr{full}, +\codestr{full\_bounds}, +\codestr{free}, +\codestr{free\_glue}, +\codestr{northwest}, +\codestr{north}, +\codestr{northeast}, +\codestr{west}, +\codestr{center}, +\codestr{east}, +\codestr{southwest}, +\codestr{south}, +\codestr{southeast}, +\codestr{stretch\_top}, +\codestr{stretch\_bottom}, +\codestr{stretch\_left}, +\codestr{stretch\_right}, +\codestr{free\_glue\_northwest}, +\codestr{free\_glue\_north}, +\codestr{free\_glue\_northeast}, +\codestr{free\_glue\_west}, +\codestr{free\_glue\_center}, +\codestr{free\_glue\_east}, +\codestr{free\_glue\_southwest}, +\codestr{free\_glue\_south}, and +\codestr{free\_glue\_southeast}. +\end{flushleft} + +The ``free'' policies allow the managed +object to be moved around, whereas the other versions do not. +The ``glue'' policies glue the object to some border, while allowing +it to be moved away from it by user action, but not automatically. +The ``stretch'' policies stretch the object along the given border, +while the coordinate-based policies simply place the object along +that border. diff --git a/doc/objects.tex b/doc/objects.tex index 5a5b04f..b9de147 100644 --- a/doc/objects.tex +++ b/doc/objects.tex @@ -5,7 +5,7 @@ While Ion does not not have a truly object-oriented design \footnote{the author doesn't like such artificial designs}, things that appear on the computer screen are, however, quite -naturally expressed as such ''objects''. Therefore Ion implements +naturally expressed as such ``objects''. Therefore Ion implements a rather primitive OO system for these screen objects and some other things. @@ -21,7 +21,7 @@ basic relations. For simplicity we consider only the essential-for-basic-configuration Ioncore, \file{mod\_tiling} and \file{mod\_query} classes. -See Appendix \ref{app:fullhierarchy} for the full class hierachy visible +See Appendix \ref{app:fullhierarchy} for the full class hierarchy visible to Lua side. \subsection{Class hierarchy} @@ -73,7 +73,7 @@ The core classes: screen. Each object of type \type{WRegion} has a size and position relative to the parent \type{WRegion}. While a big part of Ion operates on these instead of more specialised classes, \type{WRegion} - is a ''virtual'' base class in that there are no objects of ''pure'' + is a ``virtual'' base class in that there are no objects of ``pure'' type \type{WRegion}; all concrete regions are objects of some class that inherits \type{WRegion}. @@ -85,27 +85,26 @@ The core classes: internal objects having an X window associated to them (\type{WClientWins} also have X windows associated to them). + \item[\type{WMPlex}] is a base class for all regions that ``multiplex'' + other regions. This means that of the regions managed by the multiplexer, + only one can be displayed at a time. + + \item[\type{WScreen}]\indextype{WScreen} is an instance of \type{WMPlex} + for screens. + \item[\type{WRootWin}]\indextype{WRootWin} is the class for root windows\index{root window} of X screens\index{screen!X}. - Note that an ''X screen'' or root window is not necessarily a - single physical screen\index{screen!physical} as a root window - may be split over multiple screens when hacks such as + It is an instance of \type{WScreen}. + Note that an ``X screen'' or root window is not necessarily a + single physical screen\index{screen!physical} as a root window + may be split over multiple screens when ugly hacks such as Xinerama\index{Xinerama} are used. (Actually there can be only - one root window when Xinerama is used.) + one root window when Xinerama is used.) - \item[\type{WMPlex}] is a base class for all regions that''multiplex'' - other regions. This means that of the regions managed by the multiplexer, - only one can be displayed at a time. Classes that inhereit \type{WMPlex} - include screens and frames. - - \item[\type{WScreen}]\indextype{WScreen} is the class for objects - corresponding to physical screens. Screens may share a root - window when the Xinerama extension is used as explained above. - \item[\type{WFrame}]\indextype{WFrame} is the class for frames. - While most Ion's objects have no graphical presentation, frames basically - add to \type{WMPlex}es the decorations around client windows - (borders, tabs). + While most Ion's objects have no graphical presentation, frames + basically add to \type{WMPlex}es the decorations around client + windows (borders, tabs). \item[\type{WGroup}]\indextype{WGroup} is the base class for groups. Particular types of groups are workspaces @@ -130,16 +129,16 @@ Classes implemented by the \file{mod\_query} module: \begin{description} \item[\type{WInput}]\indextype{WInput} is a virtual base class for the two classes below. - \item[\type{WEdln}]\indextype{WEdln} is the class for the ''queries'', + \item[\type{WEdln}]\indextype{WEdln} is the class for the ``queries'', the text inputs that usually appear at bottoms of frames and sometimes - screens. Queries are the functional equivalent of ''mini buffers'' in + screens. Queries are the functional equivalent of ``mini buffers'' in many text editors. \item[\type{WMessage}]\indextype{WMessage} implements the boxes for warning and other messages that Ion may wish to display to the user. These also usually appear at bottoms of frames. \end{description} -There are also some other ''proxy'' classes that do not refer +There are also some other ``proxy'' classes that do not refer to objects on the screen. The only important one of these for basic configuration is \type{WMoveresMode} that is used for binding callbacks in the move and resize mode. diff --git a/doc/objectsimpl.tex b/doc/objectsimpl.tex index ccc440d..a224aa5 100644 --- a/doc/objectsimpl.tex +++ b/doc/objectsimpl.tex @@ -1,14 +1,14 @@ \section{Object system implementation} First, to get things clear, what are considered objects here are C -structures containing a properly initialized \type\indextype{WObj} +structures containing a properly initialised \type\indextype{WObj} structure defined in \file{ioncore/obj.h} as the first element (or the first element of the structure which is the first element and so on which gives rise to inheritance). The \type{WObj} structure contains a pointer to a \type{WObjDescr}\indextype{WObjDescr} class type info structure and -a list of so called ''watches''. The \type{WObjDescr} structure simply +a list of so called ``watches''. The \type{WObjDescr} structure simply lists the class name, a table of dynamic functions and a pointer to -deinitialisation function (or ''destructor''). +deinitialisation function (or ``destructor''). Ion does not do any reference counting, garbage collecting or other fancy things related to automatic safe freeing of objects with its diff --git a/doc/prelim.tex b/doc/prelim.tex index c5db5f8..8a0a6c3 100644 --- a/doc/prelim.tex +++ b/doc/prelim.tex @@ -33,14 +33,11 @@ should be loaded. Currently Ion provides the following modules: keyboard-operated in-frame menus. \item[\file{mod\_statusbar}] Module that implements a statusbar that can be adaptively embedded in each workspace's layout. - \item[\file{mod\_dock}] Module for docking Window Maker dockapps. + \item[\file{mod\_dock}] Module for docking Window Maker dock-apps. The dock can both float and be embedded as the statusbar. \item[\file{mod\_sp}] This module implements a scratchpad frame that can be toggled on/off everywhere. Think of the 'console' in some first-person shooters. - \item[\file{mod\_mgmtmode}] Support module for implementing ''management - modes'' with a XOR-frame similar to move/resize mode around selected - region. \item[\file{mod\_sm}] Session management support module. \emph{Loaded automatically when needed!} \end{description} @@ -48,10 +45,10 @@ should be loaded. Currently Ion provides the following modules: So-called drawing engines are also implemented as a modules, but they are not discussed here; see chapter \ref{chap:gr}. -The stock configuration for the 'ion3' executable loads all of the modules -mentioned above except \file{mod\_dock} and file{mod\_mgmtmode}. -The stock configuration for the 'pwm3' executable (which differs from the -'ion3' executable in a few configuration details, such as Xinerama usage) +The stock configuration for the \file{ion3} executable loads all of the +modules mentioned above except \file{mod\_dock}. +The stock configuration for the \file{pwm3} executable (which differs +from the \file{ion3} executable in a few configuration details) loads another set of modules. diff --git a/doc/statusd.tex b/doc/statusd.tex index e1fe6b2..82e70eb 100644 --- a/doc/statusd.tex +++ b/doc/statusd.tex @@ -1,14 +1,15 @@ \section{Writing \command{ion-statusd} monitors} +\label{sec:statusd} All statusbar meters that do not monitor the internal state of Ion should go in the separate \command{ion-statusd} program. -Whenever the user requests a meter \code{\%foo} or \code{\%foo_bar} to be -inserted in a statusbar, \file{mod\_statusbar} asks \command{ion-statusd} to -load \fnref{statusd_foo.lua} on its search path (same as that for Ion-side +Whenever the user requests a meter \codestr{\%foo} or \codestr{\%foo\_bar} to +be inserted in a statusbar, \file{mod\_statusbar} asks \command{ion-statusd} +to load \fnref{statusd_foo.lua} on its search path (same as that for Ion-side scripts). This script should then supply all meters with the initial part -'\code{foo}'. +\codestr{foo}. To provide this value, the script should simply call \code{statusd.inform} with the name of the meter and the value as a string. @@ -16,11 +17,11 @@ Additionally the script should provide a 'template' for the meter to facilitate expected width calculation by \file{mod\_statusbar}, and may provide a 'hint' for colour-coding the value. The interpretation of hints depends on the graphical style in use, and currently the -stock styles support the \code{normal}, \code{important} and -\code{critical} hints. +stock styles support the \codestr{normal}, \codestr{important} and +\codestr{critical} hints. -In our example of the 'foo monitor', at script init we might broadcast +In our example of the 'foo monitor', at script initialisation we might broadcast the template as follows: \begin{verbatim} diff --git a/doc/tricks.tex b/doc/tricks.tex index 69fe945..9cf86d1 100644 --- a/doc/tricks.tex +++ b/doc/tricks.tex @@ -4,20 +4,20 @@ This chapter documents some additional features of the Ion configuration and scripting interface that can be used for more advanced scripting than -the basic configuration exlained in chapter \ref{chap:config}. +the basic configuration explained in chapter \ref{chap:config}. \section{Hooks} \label{sec:hooks} Hooks are lists of functions to be called when a certain event occurs. -There are two types of them; normal and ''alternative'' hooks. Normal +There are two types of them; normal and ``alternative'' hooks. Normal hooks do not return anything, but alt-hooks should return a boolean -indicating whether it handled its assigned task succesfully. In the case +indicating whether it handled its assigned task successfully. In the case that \var{true} is returned, remaining handlers are not called. Hook handlers are registered by first finding the hook with \fnref{ioncore.get_hook} and then calling \fnref{WHook.add} -on the (succesfull) result with the handler as parameter. Similarly +on the (successful) result with the handler as parameter. Similarly handlers are unregistered with \fnref{WHook.remove}. For example: \begin{verbatim} @@ -31,7 +31,7 @@ handlers do. The types of parameters for each hook are listed in the hook reference, section \ref{sec:hookref}. -Note that many of the hooks are called in ''protected mode'' and can not +Note that many of the hooks are called in ``protected mode'' and can not use any functions that modify Ion's internal state. TODO: More detailed documentation when this is final. @@ -39,7 +39,7 @@ documentation when this is final. \subsection{Direct object references} -All Ion objects are passed to Lua scriptss as 'userdatas', and you may +All Ion objects are passed to Lua scripts as 'userdatas', and you may safely store such object references for future use. The C-side object may be destroyed while Lua still refers to the object. All exported functions gracefully fail in such a case, but if you need to explicitly diff --git a/etc/Makefile b/etc/Makefile index 6a940a1..16aa8f4 100644 --- a/etc/Makefile +++ b/etc/Makefile @@ -14,10 +14,8 @@ ETC = cfg_ion.lua cfg_ioncore.lua cfg_kludges.lua cfg_defaults.lua \ look_brownsteel.lua look_clean.lua look_dusky.lua \ look_greyviolet.lua look_ios.lua look_cleanviolet.lua \ look_simpleblue.lua look_cleanios.lua look_newviolet.lua \ - lookcommon_clean.lua lookcommon_clean_stdisp.lua \ - lookcommon_clean_tab.lua lookcommon_clean_frame.lua \ - lookcommon_emboss.lua lookcommon_emboss_stdisp.lua \ - lookcommon_emboss_tab.lua lookcommon_emboss_frame.lua + look_greenlight.lua \ + lookcommon_clean.lua lookcommon_emboss.lua ###################################### diff --git a/etc/cfg_ion.lua b/etc/cfg_ion.lua index d1255e5..790cc46 100644 --- a/etc/cfg_ion.lua +++ b/etc/cfg_ion.lua @@ -58,3 +58,19 @@ dopath("cfg_defaults") --dopath("mod_dock") --dopath("mod_sp") + +-- +-- Common customisations +-- + +-- Uncommenting the following lines should get you plain-old-menus instead +-- of query-menus. + +--defbindings("WScreen", { +-- kpress(ALTMETA.."F12", "mod_menu.menu(_, _sub, 'mainmenu', {big=true})"), +--}) +-- +--defbindings("WMPlex.toplevel", { +-- kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"), +--}) + diff --git a/etc/cfg_ioncore.lua b/etc/cfg_ioncore.lua index 4cfe2a3..be393c9 100644 --- a/etc/cfg_ioncore.lua +++ b/etc/cfg_ioncore.lua @@ -179,8 +179,8 @@ defbindings("WMPlex.toplevel", { kpress(META.."G", "mod_query.query_gotoclient(_)"), bdoc("Display context menu."), - --kpress(META.."M", "mod_menu.menu(_, _chld, 'ctxmenu')"), - kpress(META.."M", "mod_query.query_menu(_, _chld, 'ctxmenu', 'Context menu:')"), + --kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"), + kpress(META.."M", "mod_query.query_menu(_, _sub, 'ctxmenu', 'Context menu:')"), }) @@ -197,7 +197,7 @@ defbindings("WFrame", { }), bdoc("Display context menu."), - mpress("Button3", "mod_menu.pmenu(_, _chld, 'ctxmenu')"), + mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"), bdoc("Begin move/resize mode."), kpress(META.."R", "WFrame.begin_kbresize(_)"), @@ -222,13 +222,13 @@ defbindings("WFrame", { -- Frames for transient windows ignore this bindmap defbindings("WFrame.toplevel", { - bdoc("Tag current object within the frame."), - kpress(META.."T", "WRegion.set_tagged(_sub, 'toggle')", "_sub:non-nil"), - bdoc("Query for a client window to attach."), kpress(META.."A", "mod_query.query_attachclient(_)"), submap(META.."K", { + -- Display tab numbers when modifiers are released + submap_wait("ioncore.tabnum.show(_)"), + bdoc("Switch to n:th object within the frame."), kpress("1", "WFrame.switch_nth(_, 0)"), kpress("2", "WFrame.switch_nth(_, 1)"), diff --git a/etc/cfg_kludges.lua b/etc/cfg_kludges.lua index 974ac08..ce0f39c 100644 --- a/etc/cfg_kludges.lua +++ b/etc/cfg_kludges.lua @@ -9,13 +9,6 @@ defwinprop{ acrobatic = true } --- Galeon's find dialog does not always have its transient_for hint --- set when the window is being mapped. -defwinprop{ - class = "galeon_browser", - instance = "dialog_find", - transient_mode = "current", -} defwinprop{ class = "Xpdf", @@ -24,6 +17,16 @@ defwinprop{ } +-- Put all dockapps in the statusbar's systray, also adding the missing +-- size hints necessary for this to work. +defwinprop{ + is_dockapp = true, + statusbar = "systray", + max_size = { w = 64, h = 64}, + min_size = { w = 64, h = 64}, +} + + -- You might want to enable these if you really must use XMMS. --[[ defwinprop{ diff --git a/etc/look_brownsteel.lua b/etc/look_brownsteel.lua index 5aa488e..68346d4 100644 --- a/etc/look_brownsteel.lua +++ b/etc/look_brownsteel.lua @@ -17,20 +17,7 @@ de.defstyle("*", { text_align = "center", }) -de.defstyle("frame", { - based_on = "*", - shadow_colour = "#404040", - highlight_colour = "#707070", - padding_colour = "#505050", - background_colour = "#000000", - foreground_colour = "#ffffff", - padding_pixels = 1, - highlight_pixels = 1, - shadow_pixels = 1, -}) - de.defstyle("tab", { - based_on = "*", font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*", de.substyle("active-selected", { shadow_colour = "#304050", @@ -59,9 +46,7 @@ de.defstyle("tab", { text_align = "center", }) - de.defstyle("input", { - based_on = "*", shadow_colour = "#404040", highlight_colour = "#707070", background_colour = "#000000", @@ -81,7 +66,6 @@ de.defstyle("input", { }) de.defstyle("input-menu", { - based_on = "*", de.substyle("active", { shadow_colour = "#304050", highlight_colour = "#708090", diff --git a/etc/look_clean.lua b/etc/look_clean.lua index a95cbf3..033655f 100644 --- a/etc/look_clean.lua +++ b/etc/look_clean.lua @@ -18,7 +18,6 @@ de.defstyle("*", { }) de.defstyle("tab", { - based_on = "*", font = "-misc-fixed-medium-r-*-*-13-*-*-*-*-60-*-*", de.substyle("active-selected", { shadow_colour = "white", @@ -48,15 +47,7 @@ de.defstyle("tab", { }) de.defstyle("input", { - based_on = "*", - shadow_colour = "grey", - highlight_colour = "grey", - background_colour = "#545d75", foreground_colour = "white", - padding_pixels = 1, - highlight_pixels = 1, - shadow_pixels = 1, - border_style = "elevated", de.substyle("*-cursor", { background_colour = "white", foreground_colour = "#545d75", @@ -71,8 +62,8 @@ de.defstyle("input", { dopath("lookcommon_clean") de.defstyle("tab-menuentry-big", { - based_on = "tab-menuentry", padding_pixels = 7, + font = "-misc-fixed-medium-r-*-*-18-*-*-*-*-*-*-*", }) gr.refresh() diff --git a/etc/look_cleanios.lua b/etc/look_cleanios.lua index 8af1548..e1173b7 100644 --- a/etc/look_cleanios.lua +++ b/etc/look_cleanios.lua @@ -19,7 +19,6 @@ de.defstyle("*", { }) de.defstyle("tab", { - based_on = "*", font = "-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*", de.substyle("active-selected", { shadow_colour = "#f0f066", @@ -49,7 +48,6 @@ de.defstyle("tab", { }) de.defstyle("input-edln", { - based_on = "*", de.substyle("*-cursor", { background_colour = "#000000", foreground_colour = "#d8d8d8", diff --git a/etc/look_cleanviolet.lua b/etc/look_cleanviolet.lua index d52efac..542fb7e 100644 --- a/etc/look_cleanviolet.lua +++ b/etc/look_cleanviolet.lua @@ -30,7 +30,6 @@ de.defstyle("*", { de.defstyle("tab", { - based_on = "*", font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*", de.substyle("active-selected", { @@ -52,7 +51,6 @@ de.defstyle("tab", { de.defstyle("input", { - based_on = "*", text_align = "left", spacing = 1, -- Greyish violet background diff --git a/etc/look_dusky.lua b/etc/look_dusky.lua index 4387e9d..aaa76f6 100644 --- a/etc/look_dusky.lua +++ b/etc/look_dusky.lua @@ -17,20 +17,7 @@ de.defstyle("*", { text_align = "center", }) -de.defstyle("frame", { - based_on = "*", - shadow_colour = "#404040", - highlight_colour = "#707070", - padding_colour = "#505050", - background_colour = "#000000", - foreground_colour = "#ffffff", - padding_pixels = 2, - highlight_pixels = 1, - shadow_pixels = 1, -}) - de.defstyle("tab", { - based_on = "*", font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*", de.substyle("active-selected", { shadow_colour = "#452727", @@ -60,7 +47,6 @@ de.defstyle("tab", { }) de.defstyle("input", { - based_on = "*", shadow_colour = "#404040", highlight_colour = "#707070", background_colour = "#000000", @@ -77,7 +63,6 @@ de.defstyle("input", { }) de.defstyle("input-menu", { - based_on = "*", de.substyle("active", { shadow_colour = "#452727", highlight_colour = "#866868", diff --git a/etc/look_greenlight.lua b/etc/look_greenlight.lua new file mode 100644 index 0000000..d797b74 --- /dev/null +++ b/etc/look_greenlight.lua @@ -0,0 +1,73 @@ +-- +-- look_greenlight for Ion's default drawing engine. +-- + +if not gr.select_engine("de") then + return +end + +-- Clear existing styles from memory. +de.reset() + +-- Base style +de.defstyle("*", { + highlight_colour = "#666666", + shadow_colour = "#666666", + background_colour = "#333333", + foreground_colour = "#cccccc", + + shadow_pixels = 1, + highlight_pixels = 1, + padding_pixels = 1, + spacing = 0, + border_style = "elevated", + border_sides = "tb", + + font = "-*-helvetica-medium-r-normal-*-14-*-*-*-*-*-*-*", + text_align = "center", +}) + + +de.defstyle("frame", { + background_colour = "#000000", + transparent_background = false, +}) + + +de.defstyle("tab", { + font = "-*-helvetica-medium-r-normal-*-10-*-*-*-*-*-*-*", + spacing = 1, + + de.substyle("active-selected", { + highlight_colour = "#8ac267", + shadow_colour = "#8ac267", + background_colour = "#354743", + }), + + de.substyle("inactive-selected", { + highlight_colour = "#6aa247", + shadow_colour = "#6aa247", + }), +}) + + +de.defstyle("input", { + text_align = "left", + spacing = 1, + + de.substyle("*-selection", { + background_colour = "#354743", + }), + + de.substyle("*-cursor", { + background_colour = "#8ac267", + foreground_colour = "#333333", + }), +}) + + +dopath("lookcommon_clean") + + +-- Refresh objects' brushes. +gr.refresh() diff --git a/etc/look_greyviolet.lua b/etc/look_greyviolet.lua index 43dafee..38bdd63 100644 --- a/etc/look_greyviolet.lua +++ b/etc/look_greyviolet.lua @@ -17,20 +17,7 @@ de.defstyle("*", { text_align = "center", }) -de.defstyle("frame", { - based_on = "*", - shadow_colour = "#777777", - highlight_colour = "#eeeeee", - padding_colour = "#aaaaaa", - background_colour = "#000000", - foreground_colour = "#ffffff", - padding_pixels = 2, - highlight_pixels = 1, - shadow_pixels = 1, -}) - de.defstyle("tab", { - based_on = "*", font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*", de.substyle("active-selected", { shadow_colour = "#333366", @@ -60,21 +47,12 @@ de.defstyle("tab", { }) de.defstyle("input", { - based_on = "*", - shadow_colour = "#777777", - highlight_colour = "#eeeeee", - background_colour = "#aaaaaa", - foreground_colour = "#000000", - padding_pixels = 1, - highlight_pixels = 1, - shadow_pixels = 1, - border_style = "elevated", de.substyle("*-cursor", { background_colour = "#000000", foreground_colour = "#aaaaaa", }), de.substyle("*-selection", { - background_colour = "#aaaaaa", + background_colour = "#666699", foreground_colour = "black", }), }) diff --git a/etc/look_ios.lua b/etc/look_ios.lua index 85afceb..8427773 100644 --- a/etc/look_ios.lua +++ b/etc/look_ios.lua @@ -17,26 +17,7 @@ de.defstyle("*", { text_align = "center", }) -de.defstyle("frame", { - based_on = "*", - shadow_colour = "#606060", - highlight_colour = "#ffffff", - padding_colour = "#d8d8d8", - background_colour = "#000000", - foreground_colour = "#000000", - padding_pixels = 2, - highlight_pixels = 1, - shadow_pixels = 1, - de.substyle("active", { - shadow_colour = "#606060", - highlight_colour = "#ffffff", - background_colour = "#d8d8d8", - foreground_colour = "#000000", - }), -}) - de.defstyle("tab", { - based_on = "*", font = "-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*", de.substyle("active-selected", { shadow_colour = "#f09000", @@ -66,15 +47,6 @@ de.defstyle("tab", { }) de.defstyle("input", { - based_on = "*", - shadow_colour = "#606060", - highlight_colour = "#ffffff", - background_colour = "#d8d8d8", - foreground_colour = "#000000", - padding_pixels = 1, - highlight_pixels = 1, - shadow_pixels = 1, - border_style = "elevated", de.substyle("*-cursor", { background_colour = "#000000", foreground_colour = "#d8d8d8", @@ -87,5 +59,17 @@ de.defstyle("input", { dopath("lookcommon_emboss") +de.defstyle("frame-tiled", { + spacing = 0, +}) + +de.defstyle("frame-tiled-alt", { + spacing = 0, +}) + +de.defstyle("tab-frame-tiled", { + spacing = 0, +}) + gr.refresh() diff --git a/etc/look_newviolet.lua b/etc/look_newviolet.lua index 76e2d5a..5647d5e 100644 --- a/etc/look_newviolet.lua +++ b/etc/look_newviolet.lua @@ -28,7 +28,6 @@ de.defstyle("*", { de.defstyle("tab", { - based_on = "*", font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*", de.substyle("active-selected", { @@ -48,7 +47,6 @@ de.defstyle("tab", { de.defstyle("input", { - based_on = "*", text_align = "left", highlight_colour = "#eeeeff", shadow_colour = "#eeeeff", @@ -66,7 +64,6 @@ de.defstyle("input", { de.defstyle("input-menu", { - based_on = "input", highlight_pixels = 0, shadow_pixels = 0, padding_pixels = 0, @@ -74,40 +71,20 @@ de.defstyle("input-menu", { de.defstyle("frame", { - based_on = "*", - background_colour = "#000000", - transparent_background = false, shadow_pixels = 1, highlight_pixels = 1, padding_pixels = 0, border_sides = "all", - de.substyle("quasiactive", { - -- Something detached from the frame is active - padding_colour = "#901010", - }), }) -de.defstyle("frame-tiled", { - based_on = "frame", - shadow_pixels = 0, - highlight_pixels = 0, - padding_pixels = 1, -}) - -de.defstyle("frame-tiled-alt", { - based_on = "frame-tiled", +de.defstyle("frame-transient", { bar = "none", + padding_pixels = 1, }) -de.defstyle("frame-floating", { - based_on = "frame", - bar = "shaped", - padding_pixels = 0, -}) +dopath("lookcommon_clean") -dopath("lookcommon_clean_stdisp") -dopath("lookcommon_clean_tab") -- Refresh objects' brushes. gr.refresh() diff --git a/etc/look_simpleblue.lua b/etc/look_simpleblue.lua index 1bce224..3b1cb6a 100644 --- a/etc/look_simpleblue.lua +++ b/etc/look_simpleblue.lua @@ -18,7 +18,6 @@ de.defstyle("*", { }) de.defstyle("frame", { - based_on = "*", shadow_colour = "black", highlight_colour = "black", padding_colour = "black", @@ -36,7 +35,6 @@ de.defstyle("frame", { }) de.defstyle("tab", { - based_on = "*", font = "-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*", de.substyle("active-selected", { shadow_colour = "black", @@ -66,7 +64,6 @@ de.defstyle("tab", { }) de.defstyle("input", { - based_on = "*", shadow_colour = "black", highlight_colour = "black", background_colour = "#3f3f3f", @@ -86,7 +83,6 @@ de.defstyle("input", { }) de.defstyle("input-menu", { - based_on = "input", padding_pixels=0, }) diff --git a/etc/lookcommon_clean.lua b/etc/lookcommon_clean.lua index 43399d9..49bf70a 100644 --- a/etc/lookcommon_clean.lua +++ b/etc/lookcommon_clean.lua @@ -1,5 +1,93 @@ --- Settings common to the "clean" styles. +-- Common settings for the "clean" styles -dopath("lookcommon_clean_stdisp") -dopath("lookcommon_clean_tab") -dopath("lookcommon_clean_frame") +de.defstyle("frame", { + background_colour = "#000000", + de.substyle("quasiactive", { + -- Something detached from the frame is active + padding_colour = "#901010", + }), + de.substyle("userattr1", { + -- For user scripts + padding_colour = "#009010", + }), +}) + +de.defstyle("frame-tiled", { + shadow_pixels = 0, + highlight_pixels = 0, + padding_pixels = 1, + spacing = 1, +}) + +de.defstyle("frame-tiled-alt", { + bar = "none", +}) + +de.defstyle("frame-floating", { + bar = "shaped", + padding_pixels = 0, +}) + + +de.defstyle("actnotify", { + shadow_colour = "#c04040", + highlight_colour = "#c04040", + background_colour = "#901010", + foreground_colour = "#eeeeee", +}) + +de.defstyle("tab", { + de.substyle("*-*-*-unselected-activity", { + shadow_colour = "#c04040", + highlight_colour = "#c04040", + background_colour = "#901010", + foreground_colour = "#eeeeee", + }), + + de.substyle("*-*-*-selected-activity", { + shadow_colour = "#c04040", + highlight_colour = "#c04040", + background_colour = "#b03030", + foreground_colour = "#ffffff", + }), + + de.substyle("*-*-*-tabnumber", { + background_colour = "black", + foreground_colour = "green", + }), +}) + +de.defstyle("tab-frame", { + spacing = 1, +}) + +de.defstyle("tab-frame-floating", { + spacing = 0, +}) + +de.defstyle("tab-menuentry", { + text_align = "left", +}) + +de.defstyle("tab-menuentry-big", { + font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", + padding_pixels = 7, +}) + + +de.defstyle("stdisp", { + shadow_pixels = 0, + highlight_pixels = 0, + text_align = "left", + background_colour = "#000000", + foreground_colour = "grey", + font="-misc-fixed-medium-r-*-*-13-*-*-*-*-60-*-*", + + de.substyle("important", { + foreground_colour = "green", + }), + + de.substyle("critical", { + foreground_colour = "red", + }), +}) diff --git a/etc/lookcommon_clean_frame.lua b/etc/lookcommon_clean_frame.lua deleted file mode 100644 index b118558..0000000 --- a/etc/lookcommon_clean_frame.lua +++ /dev/null @@ -1,30 +0,0 @@ --- Common frame settings for the "clean" styles - -de.defstyle("frame", { - based_on = "*", - background_colour = "#000000", - transparent_background = false, - de.substyle("quasiactive", { - -- Something detached from the frame is active - padding_colour = "#901010", - }), -}) - -de.defstyle("frame-tiled", { - based_on = "frame", - shadow_pixels = 0, - highlight_pixels = 0, - padding_pixels = 1, - spacing = 1, -}) - -de.defstyle("frame-tiled-alt", { - based_on = "frame-tiled", - bar = "none", -}) - -de.defstyle("frame-floating", { - based_on = "frame", - bar = "shaped", - padding_pixels = 0, -}) diff --git a/etc/lookcommon_clean_stdisp.lua b/etc/lookcommon_clean_stdisp.lua deleted file mode 100644 index 73abd0d..0000000 --- a/etc/lookcommon_clean_stdisp.lua +++ /dev/null @@ -1,19 +0,0 @@ --- Common stdisp configuration for the "clean styles" - -de.defstyle("stdisp", { - based_on = "*", - shadow_pixels = 0, - highlight_pixels = 0, - text_align = "left", - background_colour = "#000000", - foreground_colour = "grey", - font="-misc-fixed-medium-r-*-*-13-*-*-*-*-60-*-*", - - de.substyle("important", { - foreground_colour = "green", - }), - - de.substyle("critical", { - foreground_colour = "red", - }), -}) diff --git a/etc/lookcommon_clean_tab.lua b/etc/lookcommon_clean_tab.lua deleted file mode 100644 index e6a619d..0000000 --- a/etc/lookcommon_clean_tab.lua +++ /dev/null @@ -1,60 +0,0 @@ --- Common tab configuration (mostly activity stuff) for the "clean styles" - -de.defstyle("actnotify", { - based_on = "*", - shadow_colour = "#c04040", - highlight_colour = "#c04040", - background_colour = "#901010", - foreground_colour = "#eeeeee", -}) - -de.defstyle("tab-frame", { - based_on = "tab", - -- TODO: some kind of amend option. It should not be necessary to - -- duplicate this definition for both tab-frame and tab-menuentry, - -- or for each style, nor use more complex hacks to communicate - -- this stuff otherwise. - de.substyle("*-*-*-unselected-activity", { - shadow_colour = "#c04040", - highlight_colour = "#c04040", - background_colour = "#901010", - foreground_colour = "#eeeeee", - }), - - de.substyle("*-*-*-selected-activity", { - shadow_colour = "#c04040", - highlight_colour = "#c04040", - background_colour = "#b03030", - foreground_colour = "#ffffff", - }), -}) - -de.defstyle("tab-frame-tiled", { - based_on = "tab-frame", - spacing = 1, -}) - -de.defstyle("tab-menuentry", { - based_on = "tab", - text_align = "left", - - de.substyle("*-*-*-unselected-activity", { - shadow_colour = "#c04040", - highlight_colour = "#c04040", - background_colour = "#901010", - foreground_colour = "#eeeeee", - }), - - de.substyle("*-*-*-selected-activity", { - shadow_colour = "#c04040", - highlight_colour = "#c04040", - background_colour = "#b03030", - foreground_colour = "#ffffff", - }), -}) - -de.defstyle("tab-menuentry-big", { - based_on = "tab-menuentry", - font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", - padding_pixels = 7, -}) diff --git a/etc/lookcommon_emboss.lua b/etc/lookcommon_emboss.lua index b32289a..b15de6a 100644 --- a/etc/lookcommon_emboss.lua +++ b/etc/lookcommon_emboss.lua @@ -1,5 +1,107 @@ --- Settings common to "emboss" styles. +-- Common settings for the "emboss" styles -dopath("lookcommon_emboss_stdisp") -dopath("lookcommon_emboss_tab") -dopath("lookcommon_emboss_frame") +de.defstyle("frame", { + background_colour = "#000000", + -- The special "inherit" value causes setting 'background_colour' + -- above not to set padding_colour, but this colour being inherited. + padding_colour = "inherit", + de.substyle("quasiactive", { + -- Something detached from the frame is active + padding_colour = "#901010", + }), + de.substyle("userattr1", { + -- For user scripts + padding_colour = "#009010", + }), + border_style = "ridge", + padding_pixels = 2, + highlight_pixels = 1, + shadow_pixels = 1, + spacing = 1, +}) + +de.defstyle("frame-tiled", { + border_style = "inlaid", + padding_pixels = 1, +}) + +de.defstyle("frame-tiled-alt", { + bar = "none", +}) + +de.defstyle("frame-floating", { + bar = "shaped", + spacing = 0, +}) + +de.defstyle("frame-transient", { + bar = "none", + spacing = 0, +}) + +de.defstyle("actnotify", { + shadow_colour = "#600808", + highlight_colour = "#c04040", + background_colour = "#b03030", + foreground_colour = "#ffffff", +}) + +de.defstyle("tab", { + de.substyle("*-*-*-unselected-activity", { + shadow_colour = "#600808", + highlight_colour = "#c04040", + background_colour = "#901010", + foreground_colour = "#eeeeee", + }), + + de.substyle("*-*-*-selected-activity", { + shadow_colour = "#600808", + highlight_colour = "#c04040", + background_colour = "#b03030", + foreground_colour = "#ffffff", + }), + + de.substyle("*-*-*-tabnumber", { + background_colour = "black", + foreground_colour = "green", + }), +}) + + +de.defstyle("tab-frame", { + spacing = 1, +}) + +de.defstyle("tab-frame-floating", { + spacing = 0, +}) + +de.defstyle("tab-frame-transient", { + spacing = 0, +}) + +de.defstyle("tab-menuentry", { + text_align = "left", + highlight_pixels = 0, + shadow_pixels = 0, +}) + +de.defstyle("tab-menuentry-big", { + font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", + padding_pixels = 7, +}) + + +de.defstyle("stdisp", { + shadow_pixels = 0, + highlight_pixels = 0, + text_align = "left", + + de.substyle("important", { + foreground_colour = "green", + }), + + de.substyle("critical", { + foreground_colour = "red", + }), +}) diff --git a/etc/lookcommon_emboss_frame.lua b/etc/lookcommon_emboss_frame.lua deleted file mode 100644 index 41e1e95..0000000 --- a/etc/lookcommon_emboss_frame.lua +++ /dev/null @@ -1,17 +0,0 @@ -de.defstyle("frame-tiled", { - based_on = "frame", - border_style = "inlaid", - padding_pixels = 1, - spacing = 1, -}) - -de.defstyle("frame-floating", { - based_on = "frame", - border_style = "ridge", - bar = "shaped" -}) - -de.defstyle("frame-tiled-alt", { - based_on = "frame-tiled", - bar = "none", -}) diff --git a/etc/lookcommon_emboss_stdisp.lua b/etc/lookcommon_emboss_stdisp.lua deleted file mode 100644 index b6a0ed2..0000000 --- a/etc/lookcommon_emboss_stdisp.lua +++ /dev/null @@ -1,16 +0,0 @@ --- Common stdisp settings for the "emboss" styles - -de.defstyle("stdisp", { - based_on = "*", - shadow_pixels = 0, - highlight_pixels = 0, - text_align = "left", - - de.substyle("important", { - foreground_colour = "green", - }), - - de.substyle("critical", { - foreground_colour = "red", - }), -}) diff --git a/etc/lookcommon_emboss_tab.lua b/etc/lookcommon_emboss_tab.lua deleted file mode 100644 index 614ba82..0000000 --- a/etc/lookcommon_emboss_tab.lua +++ /dev/null @@ -1,62 +0,0 @@ --- Common tab settings for the "emboss" styles - -de.defstyle("actnotify", { - based_on = "*", - shadow_colour = "#600808", - highlight_colour = "#c04040", - background_colour = "#b03030", - foreground_colour = "#ffffff", -}) - -de.defstyle("tab-frame", { - based_on = "tab", - -- TODO: some kind of amend option. It should not be necessary to - -- duplicate this definition for both tab-frame and tab-menuentry, - -- or for each style, nor use more complex hacks to communicate - -- this stuff otherwise. - de.substyle("*-*-*-unselected-activity", { - shadow_colour = "#600808", - highlight_colour = "#c04040", - background_colour = "#901010", - foreground_colour = "#eeeeee", - }), - - de.substyle("*-*-*-selected-activity", { - shadow_colour = "#600808", - highlight_colour = "#c04040", - background_colour = "#b03030", - foreground_colour = "#ffffff", - }), -}) - -de.defstyle("tab-frame-tiled", { - based_on = "tab-frame", - spacing = 1, -}) - -de.defstyle("tab-menuentry", { - based_on = "tab", - text_align = "left", - highlight_pixels = 0, - shadow_pixels = 0, - - de.substyle("*-*-*-unselected-activity", { - shadow_colour = "#600808", - highlight_colour = "#c04040", - background_colour = "#901010", - foreground_colour = "#eeeeee", - }), - - de.substyle("*-*-*-selected-activity", { - shadow_colour = "#600808", - highlight_colour = "#c04040", - background_colour = "#b03030", - foreground_colour = "#ffffff", - }), -}) - -de.defstyle("tab-menuentry-big", { - based_on = "tab-menuentry", - font = "-*-helvetica-medium-r-normal-*-17-*-*-*-*-*-*-*", - padding_pixels = 7, -}) diff --git a/exact-version b/exact-version index 05c81ed..09adb20 100644 --- a/exact-version +++ b/exact-version @@ -1,5 +1,5 @@ Context: -[TAG ion-3ds-20070318 -Tuomo Valkonen **20070318203122] +[TAG ion-3rc-20070506 +Tuomo Valkonen **20070506144318] diff --git a/ion/ion.c b/ion/ion.c index 7c53d31..9dc0c93 100644 --- a/ion/ion.c +++ b/ion/ion.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/Makefile b/ioncore/Makefile index ae41fa5..ccf7c36 100644 --- a/ioncore/Makefile +++ b/ioncore/Makefile @@ -29,7 +29,7 @@ SOURCES=binding.c conf-bindings.c cursor.c event.c exec.c focus.c \ LUA_SOURCES=\ ioncore_ext.lua ioncore_luaext.lua ioncore_bindings.lua \ ioncore_winprops.lua ioncore_misc.lua ioncore_efbb.lua \ - ioncore_wd.lua ioncore_menudb.lua + ioncore_wd.lua ioncore_menudb.lua ioncore_tabnum.lua ifeq ($(PRELOAD_MODULES),1) CFLAGS += -DCF_PRELOAD_MODULES diff --git a/ioncore/activity.c b/ioncore/activity.c index 60c0519..25e2a5a 100644 --- a/ioncore/activity.c +++ b/ioncore/activity.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -96,8 +93,8 @@ bool region_set_activity(WRegion *reg, int sp) /*EXTL_DOC - * Set activity flag of \var{reg}. The \var{how} parameter most be - * one of (set/unset/toggle). + * Set activity flag of \var{reg}. The \var{how} parameter must be + * one of \codestr{set}, \codestr{unset} or \codestr{toggle}. */ EXTL_EXPORT_AS(WRegion, set_activity) bool region_set_activity_extl(WRegion *reg, const char *how) @@ -137,7 +134,7 @@ bool ioncore_activity_i(ExtlFn iterfn) /*EXTL_DOC - * Return first regio non activity list. + * Returns first region on activity list. */ EXTL_SAFE EXTL_EXPORT diff --git a/ioncore/activity.h b/ioncore/activity.h index a718f7c..5197786 100644 --- a/ioncore/activity.h +++ b/ioncore/activity.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_ACTIVITY_H diff --git a/ioncore/attach.c b/ioncore/attach.c index a1dc7ad..5d81222 100644 --- a/ioncore/attach.c +++ b/ioncore/attach.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/attach.h b/ioncore/attach.h index c4a2d96..ec518ae 100644 --- a/ioncore/attach.h +++ b/ioncore/attach.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_ATTACH_H diff --git a/ioncore/basicpholder.c b/ioncore/basicpholder.c index d5c85a4..77e863d 100644 --- a/ioncore/basicpholder.c +++ b/ioncore/basicpholder.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/basicpholder.h b/ioncore/basicpholder.h index 6b0df42..780c793 100644 --- a/ioncore/basicpholder.h +++ b/ioncore/basicpholder.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_BASICPHOLDER_H diff --git a/ioncore/binding.c b/ioncore/binding.c index 7b80d11..740e67b 100644 --- a/ioncore/binding.c +++ b/ioncore/binding.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -486,6 +483,11 @@ static WBinding *do_bindmap_lookup_binding(WBindmap *bindmap, binding=search_binding(bindmap, &tmp); + if(BINDING_IS_PSEUDO(act)){ + /* No use trying anything else */ + return binding; + } + if(binding==NULL){ tmp.state=AnyModifier; binding=search_binding(bindmap, &tmp); diff --git a/ioncore/binding.h b/ioncore/binding.h index a776a64..32cc2be 100644 --- a/ioncore/binding.h +++ b/ioncore/binding.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_BINDING_H @@ -20,12 +17,20 @@ #include -#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) \ diff --git a/ioncore/bindmaps.c b/ioncore/bindmaps.c index c3be60f..5948c02 100644 --- a/ioncore/bindmaps.c +++ b/ioncore/bindmaps.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/bindmaps.h b/ioncore/bindmaps.h index f9e0579..41e2f58 100644 --- a/ioncore/bindmaps.h +++ b/ioncore/bindmaps.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/classes.h b/ioncore/classes.h index 3836bc7..b1bce1b 100644 --- a/ioncore/classes.h +++ b/ioncore/classes.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_CLASSES_H diff --git a/ioncore/clientwin.c b/ioncore/clientwin.c index 4a5b4da..35164de 100644 --- a/ioncore/clientwin.c +++ b/ioncore/clientwin.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -323,8 +320,6 @@ static bool clientwin_init(WClientWin *cwin, WWindow *par, Window win, set_sane_gravity(cwin->win); - cwin->transient_for=None; - cwin->n_cmapwins=0; cwin->cmap=attr->colormap; cwin->cmaps=NULL; @@ -481,11 +476,30 @@ again: xwindow_unmanaged_selectinput(win, 0); - win=hints->icon_window; + /* Copy WM_CLASS as _ION_DOCKAPP_HACK */ + { + char **p=NULL; + int n=0; + + p=xwindow_get_text_property(win, XA_WM_CLASS, &n); + + if(p!=NULL){ + xwindow_set_text_property(hints->icon_window, + ioncore_g.atom_dockapp_hack, + (const char **)p, n); + XFreeStringList(p); + }else{ + const char *pdummy[2]={"unknowndockapp", "UnknownDockapp"}; + xwindow_set_text_property(hints->icon_window, + ioncore_g.atom_dockapp_hack, + pdummy, 2); + } + } /* It is a dockapp, do everything again from the beginning, now * with the icon window. */ + win=hints->icon_window; param.dockapp=TRUE; goto again; } @@ -754,8 +768,8 @@ static bool send_clientmsg(Window win, Atom a, Time stmp) /*EXTL_DOC - * Attempt to kill (with XKillWindow) the client that owns the X - * window correspoding to \var{cwin}. + * Attempt to kill (with \code{XKillWindow}) the client that owns + * the X window correspoding to \var{cwin}. */ EXTL_EXPORT_MEMBER void clientwin_kill(WClientWin *cwin) @@ -1041,12 +1055,27 @@ EXTL_SAFE EXTL_EXPORT_MEMBER ExtlTab clientwin_get_ident(WClientWin *cwin) { - char **p=NULL, *wrole=NULL; + char **p=NULL, **p2=NULL, *wrole=NULL; int n=0, n2=0, n3=0, tmp=0; + Window tforwin=None; ExtlTab tab; + bool dockapp_hack=FALSE; p=xwindow_get_text_property(cwin->win, XA_WM_CLASS, &n); - wrole=xwindow_get_string_property(cwin->win, ioncore_g.atom_wm_window_role, &n2); + + p2=xwindow_get_text_property(cwin->win, ioncore_g.atom_dockapp_hack, &n2); + + dockapp_hack=(n2>0); + + if(p==NULL){ + /* Some dockapps do actually have WM_CLASS, so use it. */ + p=p2; + n=n2; + p2=NULL; + } + + wrole=xwindow_get_string_property(cwin->win, ioncore_g.atom_wm_window_role, + &n3); tab=extl_create_table(); if(n>=2 && p[1]!=NULL) @@ -1056,8 +1085,18 @@ ExtlTab clientwin_get_ident(WClientWin *cwin) if(wrole!=NULL) extl_table_sets_s(tab, "role", wrole); + if(XGetTransientForHint(ioncore_g.dpy, cwin->win, &tforwin) + && tforwin!=None){ + extl_table_sets_b(tab, "is_transient", TRUE); + } + + if(dockapp_hack) + extl_table_sets_b(tab, "is_dockapp", TRUE); + if(p!=NULL) XFreeStringList(p); + if(p2!=NULL) + XFreeStringList(p2); if(wrole!=NULL) free(wrole); @@ -1085,9 +1124,9 @@ static bool check_fs_cfgrq(WClientWin *cwin, XConfigureRequestEvent *ev) if(!region_fullscreen_scr(grp, scr, sw)) cwin->flags&=~CLIENTWIN_FS_RQ; + + return TRUE; } - - return TRUE; } return FALSE; @@ -1260,8 +1299,8 @@ WRegion *clientwin_load(WWindow *par, const WFitParams *fp, ExtlTab tab) WClientWin *cwin=NULL; XWindowAttributes attr; WRectangle rg; - bool got_chkc; - + bool got_chkc=FALSE; + if(!extl_table_gets_d(tab, "windowid", &wind) || !extl_table_gets_i(tab, "checkcode", &chkc)){ return NULL; @@ -1294,14 +1333,7 @@ WRegion *clientwin_load(WWindow *par, const WFitParams *fp, ExtlTab tab) warn(TR("Saved client window does not want to be managed.")); return NULL; } - - /* - attr.x=fp->g.x; - attr.y=fp->g.y; - attr.width=fp->g.w; - attr.height=fp->g.h; - */ - + cwin=create_clientwin(par, win, &attr); if(cwin==NULL) diff --git a/ioncore/clientwin.h b/ioncore/clientwin.h index 855bc9e..d81b11a 100644 --- a/ioncore/clientwin.h +++ b/ioncore/clientwin.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_CLIENTWIN_H @@ -54,8 +51,6 @@ DECLCLASS(WClientWin){ int orig_bw; - Window transient_for; - Colormap cmap; Colormap *cmaps; Window *cmapwins; diff --git a/ioncore/colormap.c b/ioncore/colormap.c index 564336d..ea3fedd 100644 --- a/ioncore/colormap.c +++ b/ioncore/colormap.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/colormap.h b/ioncore/colormap.h index 143f1ec..881d692 100644 --- a/ioncore/colormap.h +++ b/ioncore/colormap.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_COLORMAP_H diff --git a/ioncore/common.h b/ioncore/common.h index 61bd5df..091b9c4 100644 --- a/ioncore/common.h +++ b/ioncore/common.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_COMMON_H diff --git a/ioncore/conf-bindings.c b/ioncore/conf-bindings.c index 56d679e..c449a87 100644 --- a/ioncore/conf-bindings.c +++ b/ioncore/conf-bindings.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -199,12 +196,13 @@ static bool do_submap(WBindmap *bindmap, const char *str, ExtlTab subtab, uint action, uint mod, uint ksb) { WBinding binding, *bnd; - uint kcb; + uint kcb=0; if(action!=BINDING_KEYPRESS) return FALSE; kcb=XKeysymToKeycode(ioncore_g.dpy, ksb); + bnd=bindmap_lookup_binding(bindmap, action, mod, kcb); if(bnd!=NULL && bnd->submap!=NULL && bnd->state==mod) @@ -239,6 +237,9 @@ static StringIntMap action_map[]={ {"mclick", BINDING_BUTTONCLICK}, {"mdblclick", BINDING_BUTTONDBLCLICK}, {"mdrag", BINDING_BUTTONMOTION}, + {"submap_enter", BINDING_SUBMAP_ENTER}, + {"submap_wait", BINDING_SUBMAP_RELEASEMOD}, + /*{"submap_leave", BINDING_SUBMAP_LEAVE},*/ {NULL, 0} }; @@ -271,14 +272,16 @@ static bool do_entry(WBindmap *bindmap, ExtlTab tab, goto fail; } } + + if(!BINDING_IS_PSEUDO(action)){ + if(!extl_table_gets_s(tab, "kcb", &ksb_str)) + goto fail; - if(!extl_table_gets_s(tab, "kcb", &ksb_str)) - goto fail; - - if(!ioncore_parse_keybut(ksb_str, &mod, &ksb, - (action!=BINDING_KEYPRESS && action!=-1), - init_any)){ - goto fail; + if(!ioncore_parse_keybut(ksb_str, &mod, &ksb, + (action!=BINDING_KEYPRESS && action!=-1), + init_any)){ + goto fail; + } } if(extl_table_gets_t(tab, "submap", &subtab)){ diff --git a/ioncore/conf-bindings.h b/ioncore/conf-bindings.h index e86c871..7186cc4 100644 --- a/ioncore/conf-bindings.h +++ b/ioncore/conf-bindings.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_CONF_BINDINGS_H diff --git a/ioncore/conf.c b/ioncore/conf.c index b8545e2..eb464cb 100644 --- a/ioncore/conf.c +++ b/ioncore/conf.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -61,7 +58,8 @@ static ExtlFn get_layout_fn; * for hidden workspaces with activity? \\ * \var{frame_default_index} & (string) Specifies where to add new regions * on the mutually exclusive list of a frame. One of - * ''last'', ''next'' (for after current), ''next-act'' + * \codestr{last}, \codestr{next}, (for after current), + * or \codestr{next-act} * (for after current and anything with activity right * after it). \\ * \var{dblclick_delay} & (integer) Delay between clicks of a double click.\\ @@ -74,9 +72,11 @@ static ExtlFn get_layout_fn; * \var{kbresize_maxacc} & (floating point) See below. \\ * \var{framed_transients} & (boolean) Put transients in nested frames. \\ * \var{float_placement_method} & (string) How to place floating frames. - * One of ''udlr'' (up-down, then left-right), - * ''lrud'' (left-right, then up-down) or ''random''. \\ - * \var{mousefocus} & String: ''disable'' or ''sloppy''. \\ + * One of \codestr{udlr} (up-down, then left-right), + * \codestr{lrud} (left-right, then up-down), or + * \codestr{random}. \\ + * \var{mousefocus} & (string) Mouse focus mode: + * \codestr{disable} or \codestr{sloppy}. \\ * \var{unsqueeze} & (boolean) Auto-unsqueeze transients/menus/queries/etc. \\ * \var{autoraise} & (boolean) Autoraise regions in groups on goto. \\ * \end{tabularx} @@ -209,7 +209,8 @@ ExtlTab ioncore_get_layout(const char *layout) /*EXTL_DOC - * Get important directories (userdir, sessiondir, searchpath). + * Get important directories (the fields \var{userdir}, + * \var{sessiondir}, \var{searchpath} in the returned table). */ EXTL_SAFE EXTL_EXPORT @@ -224,7 +225,8 @@ ExtlTab ioncore_get_paths(ExtlTab tab) /*EXTL_DOC - * Set important directories (sessiondir, searchpath). + * Set important directories (the fields \var{sessiondir}, \var{searchpath} + * of \var{tab}). */ EXTL_EXPORT bool ioncore_set_paths(ExtlTab tab) diff --git a/ioncore/conf.h b/ioncore/conf.h index 696852d..6f82163 100644 --- a/ioncore/conf.h +++ b/ioncore/conf.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_CONF_H diff --git a/ioncore/cursor.c b/ioncore/cursor.c index 6973a16..884dd5b 100644 --- a/ioncore/cursor.c +++ b/ioncore/cursor.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include "common.h" diff --git a/ioncore/cursor.h b/ioncore/cursor.h index 8d03f79..5c9c6e5 100644 --- a/ioncore/cursor.h +++ b/ioncore/cursor.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_CURSOR_H diff --git a/ioncore/detach.c b/ioncore/detach.c index 8493b9a..72c7406 100644 --- a/ioncore/detach.c +++ b/ioncore/detach.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -41,7 +38,8 @@ static void get_relative_geom(WRectangle *g, WRegion *reg, WRegion *mgr) } -bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode) +static bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode, + uint framelevel) { WGroupAttachParams ap=GROUPATTACHPARAMS_INIT; WRegionAttachData data; @@ -71,6 +69,9 @@ bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode) ap.geom_weak_set=TRUE; ap.geom_weak=0; + + ap.level_set=TRUE; + ap.level=framelevel+1; get_relative_geom(&fpa.inner_geom, reg, (WRegion*)grp); @@ -84,8 +85,8 @@ bool ioncore_do_detach(WRegion *reg, WGroup *grp, WFrameMode framemode) ap.szplcy=st->szplcy; ap.szplcy_set=TRUE; - ap.level=maxof(st->level, STACKING_LEVEL_NORMAL); ap.level_set=TRUE; + ap.level=maxof(st->level, STACKING_LEVEL_NORMAL); } ap.geom_set=TRUE; @@ -123,14 +124,19 @@ static WRegion *check_mplex(WRegion *reg, WFrameMode *mode) } -static WGroup *find_group(WRegion *reg) +static WGroup *find_group(WRegion *reg, uint *level) { WRegion *mgr=REGION_MANAGER(reg); while(mgr!=NULL){ + reg=mgr; mgr=REGION_MANAGER(mgr); - if(OBJ_IS(mgr, WGroup)) + if(OBJ_IS(mgr, WGroup)){ + WStacking *st=ioncore_find_stacking((WRegion*)reg); + if(st!=NULL) + *level=st->level; break; + } } return (WGroup*)mgr; @@ -143,10 +149,11 @@ bool ioncore_detach(WRegion *reg, int sp) WFrameMode mode; WGroup *grp; bool set, nset; + uint level=STACKING_LEVEL_NORMAL; reg=region_groupleader_of(reg); - grp=find_group(check_mplex(reg, &mode)); + grp=find_group(check_mplex(reg, &mode), &level); /* reg is only considered detached if there's no higher-level group * to attach to, thus causing 'toggle' to cycle. @@ -158,7 +165,7 @@ bool ioncore_detach(WRegion *reg, int sp) return set; if(!set){ - return ioncore_do_detach(reg, grp, mode); + return ioncore_do_detach(reg, grp, mode, level); }else{ WPHolder *ph=region_get_return(reg); @@ -177,11 +184,12 @@ bool ioncore_detach(WRegion *reg, int sp) /*EXTL_DOC * Detach or reattach \var{reg}, depending on whether \var{how} - * is 'set'/'unset'/'toggle'. (Detaching means making \var{reg} - * managed by its nearest ancestor \type{WGroup}, framed if \var{reg} is - * not itself \type{WFrame}. Reattaching means making it managed where - * it used to be managed, if a return-placeholder exists.) - * If \var{reg} is the 'bottom' of some group, the whole group is + * is \codestr{set}, \codestr{unset} or \codestr{toggle}. (Detaching + * means making \var{reg} managed by its nearest ancestor \type{WGroup}, + * framed if \var{reg} is not itself \type{WFrame}. Reattaching means + * making it managed where it used to be managed, if a return-placeholder + * exists.) + * If \var{reg} is the `bottom' of some group, the whole group is * detached. If \var{reg} is a \type{WWindow}, it is put into a * frame. */ @@ -197,24 +205,27 @@ bool ioncore_detach_extl(WRegion *reg, const char *how) void do_unsqueeze(WRegion *reg) { - WSizeHints hints; + WSizeHints h; + WRegion *mgr=REGION_MANAGER(reg); - if(REGION_MANAGER_CHK(reg, WScreen)!=NULL) + if(OBJ_IS(reg, WScreen)) return; - region_size_hints(reg, &hints); + region_size_hints(reg, &h); - if(!hints.min_set) + if(!h.min_set) return; - if(hints.min_width<=REGION_GEOM(reg).w && - hints.min_height<=REGION_GEOM(reg).h){ + if(h.min_width<=REGION_GEOM(reg).w && + h.min_height<=REGION_GEOM(reg).h){ return; } - if(!ioncore_detach(reg, SETPARAM_SET)) - return; + ioncore_detach(reg, SETPARAM_SET); + if(REGION_MANAGER(reg)==mgr) + return; + do_unsqueeze(reg); } diff --git a/ioncore/detach.h b/ioncore/detach.h index 237d887..f407a08 100644 --- a/ioncore/detach.h +++ b/ioncore/detach.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_DETACH_H diff --git a/ioncore/dummywc.h b/ioncore/dummywc.h index 6d1a491..03d6955 100644 --- a/ioncore/dummywc.h +++ b/ioncore/dummywc.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ /* This file contains dummy implementations of multibyte/widechar routines diff --git a/ioncore/event.c b/ioncore/event.c index 260d6b0..217fe1b 100644 --- a/ioncore/event.c +++ b/ioncore/event.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/event.h b/ioncore/event.h index b81edf1..d83f508 100644 --- a/ioncore/event.h +++ b/ioncore/event.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_EVENT_H diff --git a/ioncore/eventh.c b/ioncore/eventh.c index 0a9a57a..bba225c 100644 --- a/ioncore/eventh.c +++ b/ioncore/eventh.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/eventh.h b/ioncore/eventh.h index 3220791..67d4e30 100644 --- a/ioncore/eventh.h +++ b/ioncore/eventh.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_EVENTH_H diff --git a/ioncore/exec.c b/ioncore/exec.c index 06838a6..65683dc 100644 --- a/ioncore/exec.c +++ b/ioncore/exec.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/exec.h b/ioncore/exec.h index b76f01e..2661b50 100644 --- a/ioncore/exec.h +++ b/ioncore/exec.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_EXEC_H diff --git a/ioncore/extlconv.c b/ioncore/extlconv.c index 9fc7af9..b0a2bb8 100644 --- a/ioncore/extlconv.c +++ b/ioncore/extlconv.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/extlconv.h b/ioncore/extlconv.h index 28fbb95..9e4cd53 100644 --- a/ioncore/extlconv.h +++ b/ioncore/extlconv.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_EXTLCONV_H diff --git a/ioncore/extlrx.c b/ioncore/extlrx.c index a13038a..50c2acb 100644 --- a/ioncore/extlrx.c +++ b/ioncore/extlrx.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ diff --git a/ioncore/float-placement.c b/ioncore/float-placement.c index 3f6a64d..2fae298 100644 --- a/ioncore/float-placement.c +++ b/ioncore/float-placement.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/float-placement.h b/ioncore/float-placement.h index 760030e..4c8db43 100644 --- a/ioncore/float-placement.h +++ b/ioncore/float-placement.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_FLOAT_PLACEMENT_H diff --git a/ioncore/focus.c b/ioncore/focus.c index b2341ab..573dceb 100644 --- a/ioncore/focus.c +++ b/ioncore/focus.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -166,10 +163,8 @@ void region_set_await_focus(WRegion *reg) } -static bool region_is_await(WRegion *reg) +static bool region_is_parent(WRegion *reg, WRegion *aw) { - WRegion *aw=(WRegion*)await_watch.obj; - while(aw!=NULL){ if(aw==reg) return TRUE; @@ -180,6 +175,18 @@ static bool region_is_await(WRegion *reg) } +static bool region_is_await(WRegion *reg) +{ + return region_is_parent(reg, (WRegion*)await_watch.obj); +} + + +static bool region_is_focusnext(WRegion *reg) +{ + return region_is_parent(reg, ioncore_g.focus_next); +} + + /* Only keep await status if focus event is to an ancestor of the await * region. */ @@ -299,6 +306,18 @@ bool region_is_active(WRegion *reg) } +static bool region_manager_is_focusnext(WRegion *reg) +{ + if(reg==NULL || ioncore_g.focus_next==NULL) + return FALSE; + + if(reg==ioncore_g.focus_next) + return TRUE; + + return region_manager_is_focusnext(REGION_MANAGER(reg)); +} + + bool region_may_control_focus(WRegion *reg) { if(OBJ_IS_BEING_DESTROYED(reg)) @@ -306,8 +325,11 @@ bool region_may_control_focus(WRegion *reg) if(REGION_IS_ACTIVE(reg) || REGION_IS_PSEUDOACTIVE(reg)) return TRUE; - - if(region_is_await(reg)) + + if(region_is_await(reg) || region_is_focusnext(reg)) + return TRUE; + + if(region_manager_is_focusnext(reg)) return TRUE; return FALSE; diff --git a/ioncore/focus.h b/ioncore/focus.h index 683d8ae..9f16415 100644 --- a/ioncore/focus.h +++ b/ioncore/focus.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_FOCUS_H diff --git a/ioncore/frame-draw.c b/ioncore/frame-draw.c index 5be2e6b..0b3411a 100644 --- a/ioncore/frame-draw.c +++ b/ioncore/frame-draw.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -321,18 +318,7 @@ void frame_recalc_bar(WFrame *frame) FRAME_MX_FOR_ALL(sub, frame, tmp){ textw=init_title(frame, i); if(textw>0){ - if(frame->flags&FRAME_SHOW_NUMBERS){ - char *s=NULL; - libtu_asprintf(&s, "[%d]", i+1); - if(s!=NULL){ - title=grbrush_make_label(frame->bar_brush, s, textw); - free(s); - }else{ - title=NULL; - } - }else{ - title=region_make_label(sub, textw, frame->bar_brush); - } + title=region_make_label(sub, textw, frame->bar_brush); frame->titles[i].text=title; } i++; @@ -340,19 +326,6 @@ void frame_recalc_bar(WFrame *frame) } -static void set_common_attrs(const WFrame *frame, GrBrush *brush) -{ - ensure_create_attrs(); - - grbrush_set_attr(brush, REGION_IS_ACTIVE(frame) - ? GR_ATTR(active) - : GR_ATTR(inactive)); - grbrush_set_attr(brush, frame->quasiactive_count>0 - ? GR_ATTR(quasiactive) - : GR_ATTR(not_quasiactive)); -} - - void frame_draw_bar(const WFrame *frame, bool complete) { WRectangle geom; @@ -367,7 +340,7 @@ void frame_draw_bar(const WFrame *frame, bool complete) grbrush_begin(frame->bar_brush, &geom, GRBRUSH_AMEND); - set_common_attrs(frame, frame->bar_brush); + grbrush_init_attr(frame->bar_brush, &frame->baseattr); grbrush_draw_textboxes(frame->bar_brush, &geom, frame->titles_n, frame->titles, complete); @@ -386,7 +359,7 @@ void frame_draw(const WFrame *frame, bool complete) grbrush_begin(frame->brush, &geom, (complete ? 0 : GRBRUSH_NO_CLEAR_OK)); - set_common_attrs(frame, frame->brush); + grbrush_init_attr(frame->brush, &frame->baseattr); grbrush_draw_border(frame->brush, &geom); @@ -564,14 +537,52 @@ bool frame_set_background(WFrame *frame, bool set_always) void frame_setup_dragwin_style(WFrame *frame, GrStyleSpec *spec, int tab) { + gr_stylespec_append(spec, &frame->baseattr); gr_stylespec_append(spec, &frame->titles[tab].attr); +} + + +/*}}}*/ + + +/*{{{ Activated/inactivated */ + + +void frame_inactivated(WFrame *frame) +{ + ensure_create_attrs(); + + gr_stylespec_set(&frame->baseattr, GR_ATTR(inactive)); + gr_stylespec_unset(&frame->baseattr, GR_ATTR(active)); + + window_draw((WWindow*)frame, FALSE); +} + + +void frame_activated(WFrame *frame) +{ + ensure_create_attrs(); + + gr_stylespec_set(&frame->baseattr, GR_ATTR(active)); + gr_stylespec_unset(&frame->baseattr, GR_ATTR(inactive)); + + window_draw((WWindow*)frame, FALSE); +} + + +void frame_quasiactivity_change(WFrame *frame) +{ + bool is=(frame->quasiact_source!=NULL); - gr_stylespec_set(spec, REGION_IS_ACTIVE(frame) - ? GR_ATTR(active) - : GR_ATTR(inactive)); - gr_stylespec_set(spec, frame->quasiactive_count>0 - ? GR_ATTR(quasiactive) - : GR_ATTR(not_quasiactive)); + ensure_create_attrs(); + + if(is){ + gr_stylespec_set(&frame->baseattr, GR_ATTR(quasiactive)); + gr_stylespec_unset(&frame->baseattr, GR_ATTR(not_quasiactive)); + }else{ + gr_stylespec_set(&frame->baseattr, GR_ATTR(not_quasiactive)); + gr_stylespec_unset(&frame->baseattr, GR_ATTR(quasiactive)); + } } diff --git a/ioncore/frame-draw.h b/ioncore/frame-draw.h index b0134f5..e286bc3 100644 --- a/ioncore/frame-draw.h +++ b/ioncore/frame-draw.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_FRAME_DRAW_H @@ -39,4 +36,8 @@ extern void frame_update_attr(WFrame *frame, int i, WRegion *reg); extern void frame_setup_dragwin_style(WFrame *frame, GrStyleSpec *spec, int tab); +extern void frame_inactivated(WFrame *frame); +extern void frame_activated(WFrame *frame); +extern void frame_quasiactivity_change(WFrame *frame); + #endif /* ION_IONCORE_FRAME_DRAW_H */ diff --git a/ioncore/frame-pointer.c b/ioncore/frame-pointer.c index 09f1c0a..494a7b2 100644 --- a/ioncore/frame-pointer.c +++ b/ioncore/frame-pointer.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -336,7 +333,7 @@ static void p_tabdrag_end(WFrame *frame, XButtonEvent *ev) /*EXTL_DOC * Start dragging the tab that the user pressed on with the pointing device. * This function should only be used by binding it to \emph{mpress} or - * \emph{mdrag} action with area ''tab''. + * \emph{mdrag} action with area \codestr{tab}. */ EXTL_EXPORT_MEMBER void frame_p_tabdrag(WFrame *frame) diff --git a/ioncore/frame-pointer.h b/ioncore/frame-pointer.h index c7163a1..90ba94e 100644 --- a/ioncore/frame-pointer.h +++ b/ioncore/frame-pointer.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_FRAME_POINTER_H diff --git a/ioncore/frame.c b/ioncore/frame.c index f0e786e..bcecf23 100644 --- a/ioncore/frame.c +++ b/ioncore/frame.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -84,6 +81,9 @@ bool frame_init(WFrame *frame, WWindow *parent, const WFitParams *fp, frame->mode=mode; frame->tab_min_w=0; frame->bar_max_width_q=1.0; + frame->quasiact_source=NULL; + + gr_stylespec_init(&frame->baseattr); if(!mplex_init((WMPlex*)frame, parent, fp)) return FALSE; @@ -117,6 +117,7 @@ void frame_deinit(WFrame *frame) { frame_free_titles(frame); frame_release_brushes(frame); + gr_stylespec_unalloc(&frame->baseattr); mplex_deinit((WMPlex*)frame); } @@ -511,51 +512,56 @@ void frame_size_hints(WFrame *frame, WSizeHints *hints_ret) /*{{{ Focus */ -void frame_inactivated(WFrame *frame) -{ - window_draw((WWindow*)frame, FALSE); -} - - -void frame_activated(WFrame *frame) +static void frame_quasiactivation(WFrame *frame, Obj *src, bool act) { - window_draw((WWindow*)frame, FALSE); -} - - -void frame_quasiactivation(WFrame *frame, WRegion *reg, bool act) -{ - bool was, is; - - was=(frame->quasiactive_count>0); + if(frame->quasiact_source==src || act){ + bool was, is; + + was=(frame->quasiact_source!=NULL); - frame->quasiactive_count=maxof(0, frame->quasiactive_count - + (act ? 1 : -1)); - - is=(frame->quasiactive_count>0); + frame->quasiact_source=(act ? src : NULL); - if(was!=is && !REGION_IS_ACTIVE(frame)) - window_draw((WWindow*)frame, FALSE); + is=(frame->quasiact_source!=NULL); + + if(was!=is){ + frame_quasiactivity_change(frame); + if(!REGION_IS_ACTIVE(frame)) + window_draw((WWindow*)frame, FALSE); + } + } } static bool actinact(WRegion *reg, bool act) { WPHolder *returnph=region_get_return(reg); - WFrame *frame; + WFrame *frame=NULL; + Obj *src=NULL; + WRegion *tgt; if(returnph==NULL || pholder_stale(returnph)) return FALSE; - frame=OBJ_CAST(pholder_target(returnph), WFrame); + tgt=pholder_target(returnph); + + frame=OBJ_CAST(tgt, WFrame); if(frame!=NULL){ - /* Ok, reg has return placeholder set to a frame: - * do quasiactivation/inactivation + src=(Obj*)returnph; + }else{ + /* Show quasiactivation for stuff detached from + * groups contained in the frame as well. */ - frame_quasiactivation(frame, reg, act); + WGroup *grp=OBJ_CAST(tgt, WGroup); + if(grp!=NULL){ + frame=REGION_MANAGER_CHK(grp, WFrame); + src=(Obj*)grp; + } } + if(frame!=NULL) + frame_quasiactivation(frame, src, act); + return TRUE; } @@ -671,9 +677,10 @@ static WFramedPHolder *frame_make_recreate_pholder(WFrame *frame) ph=region_make_return_pholder((WRegion*)frame); - if(ph==NULL) + if(ph==NULL){ return NULL; - + } + fparam.mode=frame->mode; fph=create_framedpholder(ph, &fparam); @@ -724,6 +731,13 @@ static void frame_modify_pholders(WFrame *frame) } +bool frame_rescue_clientwins(WFrame *frame, WRescueInfo *info) +{ + frame_modify_pholders(frame); + return mplex_rescue_clientwins(&frame->mplex, info); +} + + /*}}}*/ @@ -774,7 +788,8 @@ bool frame_set_shaded(WFrame *frame, int sp) /*EXTL_DOC * Set shading state according to the parameter \var{how} - * (set/unset/toggle). Resulting state is returned, which may not be + * (\codestr{set}, \codestr{unset}, or \codestr{toggle}). + * Resulting state is returned, which may not be * what was requested. */ EXTL_EXPORT_AS(WFrame, set_shaded) @@ -795,39 +810,51 @@ bool frame_is_shaded(WFrame *frame) } -bool frame_set_numbers(WFrame *frame, int sp) +/* EXTL_DOC + * Is the attribute \var{attr} set? + */ +bool frame_is_grattr(WFrame *frame, const char *attr) { - bool set=frame->flags&FRAME_SHOW_NUMBERS; - bool nset=libtu_do_setparam(sp, set); - - if(XOR(nset, set)){ - frame->flags^=FRAME_SHOW_NUMBERS; - frame_recalc_bar(frame); - frame_draw_bar(frame, TRUE); - } - - return frame->flags&FRAME_SHOW_NUMBERS; + GrAttr a=stringstore_alloc(attr); + bool set=gr_stylespec_isset(&frame->baseattr, a); + stringstore_free(a); + return set; } -/*EXTL_DOC - * Control whether tabs show numbers (set/unset/toggle). - * Resulting state is returned, which may not be what was - * requested. - */ -EXTL_EXPORT_AS(WFrame, set_numbers) -bool frame_set_numbers_extl(WFrame *frame, const char *how) +bool frame_set_grattr(WFrame *frame, GrAttr a, int sp) { - return frame_set_numbers(frame, libtu_string_to_setparam(how)); + bool set=gr_stylespec_isset(&frame->baseattr, a); + bool nset=libtu_do_setparam(sp, set); + + if(XOR(set, nset)){ + if(nset) + gr_stylespec_set(&frame->baseattr, a); + else + gr_stylespec_unset(&frame->baseattr, a); + window_draw((WWindow*)frame, TRUE); + } + + return nset; } /*EXTL_DOC - * Does \var{frame} show numbers for tabs? + * Set extra drawing engine attributes for the frame. + * The parameter \var{attr} is the attribute, and \var{how} is + * one of \codestr{set}, \codestr{unset}, or \codestr{toggle}. */ -bool frame_is_numbers(WFrame *frame) +EXTL_EXPORT_AS(WFrame, set_grattr) +bool frame_set_grattr_extl(WFrame *frame, const char *attr, const char *how) { - return frame->flags&FRAME_SHOW_NUMBERS; + if(attr!=NULL){ + GrAttr a=stringstore_alloc(attr); + bool ret=frame_set_grattr(frame, a, libtu_string_to_setparam(how)); + stringstore_free(a); + return ret; + }else{ + return FALSE; + } } @@ -867,6 +894,14 @@ static void frame_managed_changed(WFrame *frame, int mode, bool sw, { bool need_draw=TRUE; + if(mode==MPLEX_CHANGE_REMOVE && (Obj*)reg==frame->quasiact_source){ + /* Reset indirect quasiactivation through group that + * is being removed. + */ + frame->quasiact_source=NULL; + frame_quasiactivity_change(frame); + } + if(mode!=MPLEX_CHANGE_SWITCHONLY) frame_initialise_titles(frame); else @@ -907,6 +942,32 @@ int frame_default_index(WFrame *frame) /*}}}*/ +/*{{{ prepare_manage_transient */ + + +WPHolder *frame_prepare_manage_transient(WFrame *frame, + const WClientWin *transient, + const WManageParams *param, + int unused) +{ + /* Transient manager searches should not cross tiled frames + * unless explicitly floated. + */ + if(IS_FLOATING_MODE(frame) || + extl_table_is_bool_set(transient->proptab, "float")){ + return region_prepare_manage_transient_default((WRegion*)frame, + transient, + param, + unused); + }else{ + return NULL; + } +} + + +/*}}}*/ + + /*{{{ Save/load */ @@ -1016,6 +1077,12 @@ static DynFunTab frame_dynfuntab[]={ {(DynFun*)mplex_default_index, (DynFun*)frame_default_index}, + + {(DynFun*)region_prepare_manage_transient, + (DynFun*)frame_prepare_manage_transient}, + + {(DynFun*)region_rescue_clientwins, + (DynFun*)frame_rescue_clientwins}, END_DYNFUNTAB }; diff --git a/ioncore/frame.h b/ioncore/frame.h index 7aa5014..c8827a5 100644 --- a/ioncore/frame.h +++ b/ioncore/frame.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_FRAME_H @@ -36,7 +33,6 @@ /*#define FRAME_SZH_USEMINMAX 0x1000 */ /*#define FRAME_FWD_CWIN_RQGEOM 0x2000 */ -#define FRAME_SHOW_NUMBERS 0x4000 typedef enum{ FRAME_MODE_UNKNOWN, @@ -64,10 +60,11 @@ DECLCLASS(WFrame){ int saved_x, saved_y; int tab_dragged_idx; - uint quasiactive_count; + void *quasiact_source; GrBrush *brush; GrBrush *bar_brush; + GrStyleSpec baseattr; GrTransparency tr_mode; GrTextElem *titles; int titles_n; @@ -121,6 +118,13 @@ extern bool frame_managed_rqdispose(WFrame *frame, WRegion *reg); extern void ioncore_frame_quasiactivation_notify(WRegion *reg, WRegionNotify how); +extern WPHolder *frame_prepare_manage_transient(WFrame *frame, + const WClientWin *transient, + const WManageParams *param, + int unused); + +extern bool frame_rescue_clientwins(WFrame *frame, WRescueInfo *info); + /* Save/load */ extern ExtlTab frame_get_configuration(WFrame *frame); extern WRegion *frame_load(WWindow *par, const WFitParams *fp, ExtlTab tab); diff --git a/ioncore/framedpholder.c b/ioncore/framedpholder.c index 6ef378b..de437a2 100644 --- a/ioncore/framedpholder.c +++ b/ioncore/framedpholder.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/framedpholder.h b/ioncore/framedpholder.h index dfbbe50..49becc2 100644 --- a/ioncore/framedpholder.h +++ b/ioncore/framedpholder.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_FRAMEDPHOLDER_H diff --git a/ioncore/framep.h b/ioncore/framep.h index 9dabf48..b614abe 100644 --- a/ioncore/framep.h +++ b/ioncore/framep.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_FRAMEP_H diff --git a/ioncore/fullscreen.c b/ioncore/fullscreen.c index a49d4f5..12de118 100644 --- a/ioncore/fullscreen.c +++ b/ioncore/fullscreen.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -159,8 +156,9 @@ WScreen *clientwin_fullscreen_chkrq(WClientWin *cwin, int w, int h) /*EXTL_DOC * Set client window \var{reg} full screen state according to the - * parameter \var{how} (set/unset/toggle). Resulting state is returned, - * which may not be what was requested. + * parameter \var{how} (one of \codestr{set}, \codestr{unset}, or + * \codestr{toggle}). Resulting state is returned, which may not be + * what was requested. */ EXTL_EXPORT_AS(WGroup, set_fullscreen) bool group_set_fullscreen_extl(WGroup *grp, const char *how) diff --git a/ioncore/fullscreen.h b/ioncore/fullscreen.h index 2436a98..fe58fc0 100644 --- a/ioncore/fullscreen.h +++ b/ioncore/fullscreen.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_FULLSCREEN_H diff --git a/ioncore/global.h b/ioncore/global.h index 7ac7841..c6ae9a7 100644 --- a/ioncore/global.h +++ b/ioncore/global.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_GLOBAL_H @@ -67,7 +64,8 @@ DECLSTRUCT(WGlobal){ Atom atom_checkcode; Atom atom_selection; Atom atom_mwm_hints; - + Atom atom_dockapp_hack; + WRootWin *rootwins; WScreen *screens; WRegion *focus_next; diff --git a/ioncore/gr-util.h b/ioncore/gr-util.h index 52cf384..1e90e38 100644 --- a/ioncore/gr-util.h +++ b/ioncore/gr-util.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_GR_UTIL_H diff --git a/ioncore/gr.c b/ioncore/gr.c index f864792..835c7ca 100644 --- a/ioncore/gr.c +++ b/ioncore/gr.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -98,7 +95,7 @@ static bool gr_do_select_engine(const char *engine) /*EXTL_DOC - * Future requests for ''brushes'' are to be forwarded to the drawing engine + * Future requests for ``brushes'' are to be forwarded to the drawing engine * \var{engine}. If no engine of such name is known, a module with that name * is attempted to be loaded. This function is only intended to be called from * colour scheme etc. configuration files and can not be used to change the @@ -299,7 +296,7 @@ void gr_stylespec_init(GrStyleSpec *spec) } -static bool gr_stylespec_find_(GrStyleSpec *spec, GrAttr a, int *idx_ge) +static bool gr_stylespec_find_(const GrStyleSpec *spec, GrAttr a, int *idx_ge) { bool found=FALSE; uint i; @@ -315,6 +312,15 @@ static bool gr_stylespec_find_(GrStyleSpec *spec, GrAttr a, int *idx_ge) return found; } + +bool gr_stylespec_isset(const GrStyleSpec *spec, GrAttr a) +{ + int idx_ge; + + return gr_stylespec_find_(spec, a, &idx_ge); +} + + bool gr_stylespec_add(GrStyleSpec *spec, GrAttr a, uint score) { static const uint sz=sizeof(GrAttrScore); @@ -632,7 +638,7 @@ void grbrush_unset_attr(GrBrush *brush, GrAttr attr) /*EXTL_DOC - * Read drawing engine configuration file \file{draw.lua}. + * Read drawing engine configuration file \file{look.lua}. */ EXTL_EXPORT_AS(gr, read_config) void gr_read_config() diff --git a/ioncore/gr.h b/ioncore/gr.h index 2d55298..b42c663 100644 --- a/ioncore/gr.h +++ b/ioncore/gr.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_GR_H @@ -110,6 +107,7 @@ extern uint gr_stylespec_score2(const GrStyleSpec *spec, const GrStyleSpec *attr extern void gr_stylespec_init(GrStyleSpec *spec); extern bool gr_stylespec_set(GrStyleSpec *spec, GrAttr a); +extern bool gr_stylespec_isset(const GrStyleSpec *spec, GrAttr a); extern void gr_stylespec_unset(GrStyleSpec *spec, GrAttr a); extern bool gr_stylespec_add(GrStyleSpec *spec, GrAttr a, uint score); extern bool gr_stylespec_append(GrStyleSpec *dst, const GrStyleSpec *src); diff --git a/ioncore/grab.c b/ioncore/grab.c index aad2dfd..5af822c 100644 --- a/ioncore/grab.c +++ b/ioncore/grab.c @@ -4,10 +4,10 @@ * Copyright (c) Lukas Schroeder 2002, * Tuomo Valkonen 2003-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. + * + * Alternatively, you may apply the Clarified Artistic License to this file, + * since Lukas' contributions were originally under that. */ #include @@ -119,6 +119,7 @@ void ioncore_grab_establish(WRegion *reg, GrabHandler *func, current_grab->cursor=IONCORE_CURSOR_DEFAULT; current_grab->confine_to=None; /*region_root_of(reg);*/ current_grab->sqid=last_sqid++; + watch_init(¤t_grab->watch); do_grab_install(current_grab); } } diff --git a/ioncore/grab.h b/ioncore/grab.h index ecdf256..d579984 100644 --- a/ioncore/grab.h +++ b/ioncore/grab.h @@ -4,10 +4,10 @@ * Copyright (c) Lukas Schroeder 2002, * Tuomo Valkonen 2003-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. + * + * Alternatively, you may apply the Clarified Artistic License to this file, + * since Lukas' contributions were originally under that. */ #ifndef ION_IONCORE_GRAB_H diff --git a/ioncore/group-cw.c b/ioncore/group-cw.c index 8181af8..544cd15 100644 --- a/ioncore/group-cw.c +++ b/ioncore/group-cw.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -72,9 +69,9 @@ static WPHolder *groupcw_transient_pholder(WGroupCW *cwg, WPHolder *groupcw_prepare_manage(WGroupCW *cwg, const WClientWin *cwin, - const WManageParams *param, int redir) + const WManageParams *param, int priority) { - if(redir==MANAGE_REDIR_STRICT_YES) + if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_GROUP)) return NULL; /* Only catch windows with transient mode set to current here. */ diff --git a/ioncore/group-cw.h b/ioncore/group-cw.h index b8616a7..37d96e2 100644 --- a/ioncore/group-cw.h +++ b/ioncore/group-cw.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_GROUPCW_H diff --git a/ioncore/group-ws.c b/ioncore/group-ws.c index 48ee838..647cef0 100644 --- a/ioncore/group-ws.c +++ b/ioncore/group-ws.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -173,34 +170,12 @@ bool groupws_attach_framed_extl(WGroupWS *ws, WRegion *reg, ExtlTab t) static WPHolder *groupws_do_prepare_manage(WGroupWS *ws, const WClientWin *cwin, const WManageParams *param, - int redir, int geom_weak) + int geom_weak) { WGroupAttachParams ap=GROUPATTACHPARAMS_INIT; WFramedParam fp=FRAMEDPARAM_INIT; WPHolder *ph; - if(redir==MANAGE_REDIR_PREFER_YES){ - WRegion *r=(ws->grp.current_managed!=NULL - ? ws->grp.current_managed->reg - : NULL); - WGroupIterTmp tmp; - WPHolder *ph=NULL; - - if(r!=NULL) - ph=region_prepare_manage(r, cwin, param, MANAGE_REDIR_PREFER_YES); - - if(ph==NULL){ - FOR_ALL_MANAGED_BY_GROUP(&ws->grp, r, tmp){ - ph=region_prepare_manage(r, cwin, param, - MANAGE_REDIR_PREFER_YES); - if(ph!=NULL) - break; - } - } - } - - if(redir==MANAGE_REDIR_STRICT_YES) - return NULL; fp.inner_geom_gravity_set=TRUE; fp.inner_geom=param->geom; @@ -223,8 +198,10 @@ static WPHolder *groupws_do_prepare_manage(WGroupWS *ws, WPHolder *groupws_prepare_manage(WGroupWS *ws, const WClientWin *cwin, const WManageParams *param, - int redir) + int priority) { + int cpriority=MANAGE_PRIORITY_SUB(priority, MANAGE_PRIORITY_GROUP); + int bpriority=MANAGE_PRIORITY_SUBX(priority, MANAGE_PRIORITY_GROUP); WRegion *b=(ws->grp.bottom!=NULL ? ws->grp.bottom->reg : NULL); WPHolder *ph=NULL; bool act_b=(ws->grp.bottom==ws->grp.current_managed); @@ -249,13 +226,23 @@ WPHolder *groupws_prepare_manage(WGroupWS *ws, const WClientWin *cwin, : act_b); if(b!=NULL && use_bottom) - ph=region_prepare_manage(b, cwin, param, redir); + ph=region_prepare_manage(b, cwin, param, bpriority); + + if(ph==NULL){ + /* Check current */ + WRegion *r=(ws->grp.current_managed!=NULL + ? ws->grp.current_managed->reg + : NULL); + + if(r!=NULL && r!=b) + ph=region_prepare_manage(r, cwin, param, cpriority); + } + + if(ph==NULL && MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_GROUP)) + ph=groupws_do_prepare_manage(ws, cwin, param, weak); - if(ph==NULL) - ph=groupws_do_prepare_manage(ws, cwin, param, redir, weak); - if(ph==NULL && b!=NULL && !use_bottom) - ph=region_prepare_manage(b, cwin, param, redir); + ph=region_prepare_manage(b, cwin, param, cpriority); return ph; } diff --git a/ioncore/group-ws.h b/ioncore/group-ws.h index 1fee223..e5a2613 100644 --- a/ioncore/group-ws.h +++ b/ioncore/group-ws.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_GROUPWS_H diff --git a/ioncore/group.c b/ioncore/group.c index 61a3235..9c67348 100644 --- a/ioncore/group.c +++ b/ioncore/group.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -499,7 +496,7 @@ static void group_do_set_bottom(WGroup *grp, WStacking *st) /*EXTL_DOC - * Sets the 'bottom' of \var{ws}. The region \var{reg} must already + * Sets the `bottom' of \var{ws}. The region \var{reg} must already * be managed by \var{ws}, unless \code{nil}. */ EXTL_EXPORT_MEMBER @@ -521,7 +518,7 @@ bool group_set_bottom(WGroup *ws, WRegion *reg) /*EXTL_DOC - * Returns the 'bottom' of \var{ws}. + * Returns the `bottom' of \var{ws}. */ EXTL_SAFE EXTL_EXPORT_MEMBER @@ -571,7 +568,7 @@ WStacking *group_do_add_managed_default(WGroup *ws, WRegion *reg, int level, frame=OBJ_CAST(reg, WFrame); if(frame!=NULL){ WFrameMode m=frame_mode(frame); - if(m!=FRAME_MODE_FLOATING && m!=FRAME_MODE_TRANSIENT) + if(m==FRAME_MODE_TILED || m==FRAME_MODE_TILED_ALT) frame_set_mode(frame, FRAME_MODE_FLOATING); } @@ -742,6 +739,12 @@ static void get_params(WGroup *ws, ExtlTab tab, WGroupAttachParams *par) par->geom_set=0; par->bottom=0; + if(extl_table_is_bool_set(tab, "bottom")){ + par->level=STACKING_LEVEL_BOTTOM; + par->level_set=1; + par->bottom=1; + } + if(extl_table_gets_i(tab, "level", &tmp)){ if(tmp>=0){ par->level_set=STACKING_LEVEL_NORMAL; @@ -749,12 +752,6 @@ static void get_params(WGroup *ws, ExtlTab tab, WGroupAttachParams *par) } } - if(extl_table_is_bool_set(tab, "bottom")){ - par->level=STACKING_LEVEL_BOTTOM; - par->level_set=1; - par->bottom=1; - } - if(!par->level_set && extl_table_is_bool_set(tab, "modal")){ par->level=STACKING_LEVEL_MODAL1; par->level_set=1; @@ -822,12 +819,12 @@ WRegion *group_attach(WGroup *ws, WRegion *reg, ExtlTab param) * * \begin{tabularx}{\linewidth}{lX} * \tabhead{Field & Description} - * \var{type} & Class name (a string) of the object to be created. Mandatory. \\ - * \var{name} & Name of the object to be created (a string). Optional. \\ - * \var{switchto} & Should the region be switched to (boolean)? Optional. \\ - * \var{level} & Stacking level; default is 1. \\ - * \var{modal} & Make object modal; ignored if level is set. \\ - * \var{sizepolicy} & Size policy. \\ + * \var{type} & (string) Class of the object to be created. Mandatory. \\ + * \var{name} & (string) Name of the object to be created. \\ + * \var{switchto} & (boolean) Should the region be switched to? \\ + * \var{level} & (integer) Stacking level; default is 1. \\ + * \var{modal} & (boolean) Make object modal; ignored if level is set. \\ + * \var{sizepolicy} & (string) Size policy; see Section \ref{sec:sizepolicies}. \\ * \end{tabularx} * * In addition parameters to the region to be created are passed in this @@ -1006,12 +1003,6 @@ static WStacking *prv(WGroup *ws, WStacking *st, bool wrap) typedef WStacking *NxtFn(WGroup *ws, WStacking *st, bool wrap); -static bool mapped_filt(WStacking *st, void *unused) -{ - return (st->reg!=NULL && REGION_IS_MAPPED(st->reg)); -} - - static bool focusable(WGroup *ws, WStacking *st, uint min_level) { return (st->reg!=NULL @@ -1030,7 +1021,7 @@ static WStacking *do_get_next(WGroup *ws, WStacking *sti, stacking=group_get_stacking(ws); if(stacking!=NULL) - min_level=stacking_min_level(stacking, mapped_filt, NULL); + min_level=stacking_min_level_mapped(stacking); st=sti; while(1){ @@ -1290,7 +1281,8 @@ static ExtlTab group_get_configuration(WGroup *ws) subtab=region_get_configuration(st->reg); if(subtab!=extl_table_none()){ - extl_table_sets_i(subtab, "sizepolicy", st->szplcy); + extl_table_sets_s(subtab, "sizepolicy", + sizepolicy2string(st->szplcy)); extl_table_sets_i(subtab, "level", st->level); tmpg=REGION_GEOM(st->reg); diff --git a/ioncore/group.h b/ioncore/group.h index d9a37ea..d4f2d26 100644 --- a/ioncore/group.h +++ b/ioncore/group.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_GROUP_H diff --git a/ioncore/groupedpholder.c b/ioncore/groupedpholder.c index 4112372..cce1a16 100644 --- a/ioncore/groupedpholder.c +++ b/ioncore/groupedpholder.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/groupedpholder.h b/ioncore/groupedpholder.h index 3fb9edd..d0edf68 100644 --- a/ioncore/groupedpholder.h +++ b/ioncore/groupedpholder.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_GROUPEDPHOLDER_H diff --git a/ioncore/grouppholder.c b/ioncore/grouppholder.c index aa6f5cf..3c2ed30 100644 --- a/ioncore/grouppholder.c +++ b/ioncore/grouppholder.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/grouppholder.h b/ioncore/grouppholder.h index cb0ab19..86974ad 100644 --- a/ioncore/grouppholder.h +++ b/ioncore/grouppholder.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_GROUPPHOLDER_H diff --git a/ioncore/infowin.c b/ioncore/infowin.c index f3c2da9..d23823e 100644 --- a/ioncore/infowin.c +++ b/ioncore/infowin.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/infowin.h b/ioncore/infowin.h index 799c128..26f2ef9 100644 --- a/ioncore/infowin.h +++ b/ioncore/infowin.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_INFOWIN_H diff --git a/ioncore/ioncore.c b/ioncore/ioncore.c index 49da6c7..097801d 100644 --- a/ioncore/ioncore.c +++ b/ioncore/ioncore.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -58,6 +55,7 @@ #include "llist.h" #include "exec.h" #include "screen-notify.h" +#include "key.h" #include "../version.h" @@ -273,6 +271,7 @@ static bool init_hooks() INIT_HOOK_(clientwin_mapped_hook); INIT_HOOK_(clientwin_unmapped_hook); INIT_HOOK_(clientwin_property_change_hook); + INIT_HOOK_(ioncore_submap_ungrab_hook); INIT_HOOK_(region_notify_hook); ADD_HOOK_(region_notify_hook, ioncore_frame_quasiactivation_notify); @@ -504,6 +503,7 @@ static bool ioncore_init_x(const char *display, int stflags) ioncore_g.atom_wm_window_role=XInternAtom(dpy, "WM_WINDOW_ROLE", False); ioncore_g.atom_checkcode=XInternAtom(dpy, "_ION_CWIN_RESTART_CHECKCODE", False); ioncore_g.atom_selection=XInternAtom(dpy, "_ION_SELECTION_STRING", False); + ioncore_g.atom_dockapp_hack=XInternAtom(dpy, "_ION_DOCKAPP_HACK", False); ioncore_g.atom_mwm_hints=XInternAtom(dpy, "_MOTIF_WM_HINTS", False); ioncore_init_xim(); diff --git a/ioncore/ioncore.h b/ioncore/ioncore.h index ace4908..d443631 100644 --- a/ioncore/ioncore.h +++ b/ioncore/ioncore.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_IONCORE_H diff --git a/ioncore/ioncore_bindings.lua b/ioncore/ioncore_bindings.lua index ec03ddd..aa52c74 100644 --- a/ioncore/ioncore_bindings.lua +++ b/ioncore/ioncore_bindings.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- local ioncore=_G.ioncore @@ -140,6 +137,24 @@ function ioncore.kpress_wait(keyspec, cmd, guard) return putcmd(cmd, guard, {action = "kpress_wait", kcb = keyspec}) end +--DOC +-- Submap enter event for bindings. +function ioncore.submap_enter(cmd, guard) + return putcmd(cmd, guard, {action = "submap_enter"}) +end + +--DOC +-- Submap modifier release event for bindings. +function ioncore.submap_wait(cmd, guard) + return putcmd(cmd, guard, {action = "submap_wait"}) +end + +-- DOC +-- Submap leave event for bindings. +--function ioncore.submap_leave(cmd, guard) +-- return putcmd(cmd, guard, {action = "submap_leave"}) +--end + local function mact(act_, kcb_, cmd, guard) local st, en, kcb2_, area_=string.find(kcb_, "([^@]*)@(.*)") return putcmd(cmd, guard, { diff --git a/ioncore/ioncore_efbb.lua b/ioncore/ioncore_efbb.lua index af1134c..982f2d6 100644 --- a/ioncore/ioncore_efbb.lua +++ b/ioncore/ioncore_efbb.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- warn(TR([[ diff --git a/ioncore/ioncore_ext.lua b/ioncore/ioncore_ext.lua index 2255bdd..dde9195 100644 --- a/ioncore/ioncore_ext.lua +++ b/ioncore/ioncore_ext.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- -- This is a slight abuse of the package.loaded variable perhaps, but @@ -28,6 +25,7 @@ dopath('ioncore_winprops') dopath('ioncore_misc') dopath('ioncore_wd') dopath('ioncore_menudb') +dopath('ioncore_tabnum') -- Modifier setup compatibility kludge local oldindex @@ -57,6 +55,8 @@ setmetatable(_G, newmeta) -- Export some important functions into global namespace. export(ioncore, "submap", + "submap_enter", + "submap_wait", "kpress", "kpress_wait", "mpress", diff --git a/ioncore/ioncore_luaext.lua b/ioncore/ioncore_luaext.lua index b361593..c8e94f4 100644 --- a/ioncore/ioncore_luaext.lua +++ b/ioncore/ioncore_luaext.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- diff --git a/ioncore/ioncore_menudb.lua b/ioncore/ioncore_menudb.lua index 4286054..0248b14 100644 --- a/ioncore/ioncore_menudb.lua +++ b/ioncore/ioncore_menudb.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- local ioncore=_G.ioncore @@ -405,12 +402,16 @@ local function sortmenu(m) end -function menus.ctxmenu(reg, sub_or_chld) +function menus.ctxmenu(reg, sub) local m, r, s + if obj_is(sub, "WGroup") then + sub=(sub:bottom() or sub) + end + -- First, stuff between reg (inclusive) and sub_or_chld (inclusive) -- at the top level in the menu. - r=(sub_or_chld or reg) + r=(sub or reg) while r and s~=reg do local mm=get_ctxmenu(r, s) m=((m and table.icat(mm, m)) or mm) diff --git a/ioncore/ioncore_misc.lua b/ioncore/ioncore_misc.lua index 4637279..1781765 100644 --- a/ioncore/ioncore_misc.lua +++ b/ioncore/ioncore_misc.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- local group_tmpl = { type="WGroupWS" } diff --git a/ioncore/ioncore_tabnum.lua b/ioncore/ioncore_tabnum.lua new file mode 100644 index 0000000..e9161b8 --- /dev/null +++ b/ioncore/ioncore_tabnum.lua @@ -0,0 +1,49 @@ +-- +-- ion/share/ioncore_tabnum.lua -- Ioncore tab numbering support +-- +-- Copyright (c) Tuomo Valkonen 2007. +-- +-- See the included file LICENSE for details. +-- + +ioncore.tabnum={} + +local framestate={} + +local function do_show(frame) + frame:set_grattr('numbered', 'set') + framestate[frame]='set' +end + +--DOC +-- Show tab numbers on \var{frame}, clearing them when submap +-- grab is released the next time. If \var{delay} is given, in +-- milliseconds, the numbers are not actually displayed until this +-- time has passed. +function ioncore.tabnum.show(frame, delay) + if delay and delay>0 then + local tmr=ioncore.create_timer() + framestate[frame]=tmr + tmr:set(delay, function() do_show(frame) end) + else + do_show(frame) + end +end + +--DOC +-- Clear all tab numbers set by \fnref{ioncore.tabnum.show}. +function ioncore.tabnum.clear() + local st=framestate + framestate={} + + for f, s in pairs(st) do + if s=='set' then + f:set_grattr('numbered', 'unset') + elseif obj_is(s, "WTimer") then + s:reset() + end + end +end + +ioncore.get_hook("ioncore_submap_ungrab_hook") + :add(ioncore.tabnum.clear) diff --git a/ioncore/ioncore_wd.lua b/ioncore/ioncore_wd.lua index 8b1f6ce..cdb7a36 100644 --- a/ioncore/ioncore_wd.lua +++ b/ioncore/ioncore_wd.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- local savefile="saved_wd" diff --git a/ioncore/ioncore_winprops.lua b/ioncore/ioncore_winprops.lua index c241d63..6a6ca51 100644 --- a/ioncore/ioncore_winprops.lua +++ b/ioncore/ioncore_winprops.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- local ioncore=_G.ioncore @@ -56,7 +53,7 @@ function ioncore.getwinprop(cwin) props={} pcall(function() props=winprops[c][r][i] or {} end) for idx, prop in ipairs_r(props) do - if prop:match(cwin) then + if prop:match(cwin, id) then if prop.oneshot then table.remove(props, idx) end @@ -82,7 +79,7 @@ local function ensure_winproptab(class, role, instance) end end -local function do_add_winprop(class, role, instance, name, prop) +local function do_add_winprop(class, role, instance, prop) ensure_winproptab(class, role, instance) table.insert(winprops[class][role][instance], prop) end @@ -90,10 +87,25 @@ end --DOC -- The basic name-based winprop matching criteria. -function ioncore.match_winprop_name(prop, cwin) - if not prop.name then - return true - else +function ioncore.match_winprop_dflt(prop, cwin, id) + local function chkf(p, i) + if p==nil then + return true + else + return (p==(i and true)) + -- hack for nil + end + end + + if not chkf(prop.is_transient, id.is_transient) then + return false + end + + if not chkf(prop.is_dockapp, id.is_dockapp) then + return false + end + + if prop.name then local nm=cwin:name() if nm then local st, en=string.find(nm, prop.name) @@ -102,6 +114,8 @@ function ioncore.match_winprop_name(prop, cwin) return false end end + + return true end @@ -123,9 +137,9 @@ function ioncore.defwinprop(list) end if not list2.match then - list2.match=ioncore.match_winprop_name + list2.match=ioncore.match_winprop_dflt end - do_add_winprop(class, role, instance, name, list2) + do_add_winprop(class, role, instance, list2) end diff --git a/ioncore/kbresize.c b/ioncore/kbresize.c index b4dbc7b..0a4e951 100644 --- a/ioncore/kbresize.c +++ b/ioncore/kbresize.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/kbresize.h b/ioncore/kbresize.h index 637cf63..b4ac87a 100644 --- a/ioncore/kbresize.h +++ b/ioncore/kbresize.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_KBRESIZE_H diff --git a/ioncore/key.c b/ioncore/key.c index 57ada80..4134ab7 100644 --- a/ioncore/key.c +++ b/ioncore/key.c @@ -3,14 +3,15 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include + #include +#include +#include + #include "common.h" #include "key.h" #include "binding.h" @@ -19,7 +20,6 @@ #include "cursor.h" #include "grab.h" #include "regbind.h" -#include #include "strings.h" #include "xwindow.h" @@ -97,9 +97,7 @@ void clientwin_quote_next(WClientWin *cwin) static bool waitrelease_handler(WRegion *reg, XEvent *ev) { - if(!ioncore_unmod(ev->xkey.state, ev->xkey.keycode)) - return TRUE; - return FALSE; + return (ioncore_unmod(ev->xkey.state, ev->xkey.keycode)==0); } @@ -120,29 +118,63 @@ static void waitrelease(WRegion *reg) } -static void free_subs(WSubmapState *p) +static void free_sub(WSubmapState *p) { - WSubmapState *next; + /*extl_unref_fn(p->leave); + watch_reset(&p->leave_reg); + */ - while(p!=NULL){ - next=p->next; - free(p); - p=next; + free(p); +} + + +void region_free_submapstat(WRegion *reg) +{ + while(reg->submapstat!=NULL){ + WSubmapState *p=reg->submapstat; + reg->submapstat=p->next; + free_sub(p); } } +WHook *ioncore_submap_ungrab_hook=NULL; + + +static void call_submap_ungrab_hook() +{ + hook_call_v(ioncore_submap_ungrab_hook); +} + + static void clear_subs(WRegion *reg) { - while(reg->submapstat!=NULL){ - WSubmapState *tmp=reg->submapstat; - reg->submapstat=tmp->next; - free(tmp); + region_free_submapstat(reg); + mainloop_defer_action(NULL, (WDeferredAction*)call_submap_ungrab_hook); +/* + while(reg!=NULL && reg->submapstat!=NULL){ + WSubmapState *p=reg->submapstat; + reg->submapstat=p->next; + + if(p->leave!=extl_fn_none() && p->leave_reg.obj!=NULL){ + Watch regw=WATCH_INIT; + + watch_setup(®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; @@ -159,14 +191,16 @@ static bool add_sub(WRegion *reg, uint key, uint state) s=ALLOC(WSubmapState); if(s==NULL) - return FALSE; + return NULL; s->key=key; s->state=state; + /*s->leave=extl_fn_none(); + watch_init(&s->leave_reg);*/ *p=s; - return TRUE; + return s; } @@ -189,88 +223,159 @@ bool ioncore_current_key(uint *kcb, uint *state, bool *sub) } -/* Return value TRUE = grab needed */ -static bool do_key(WRegion *reg, XKeyEvent *ev) +enum{GRAB_NONE, GRAB_SUBMAP, GRAB_WAITRELEASE}; + + +static WBinding *lookup_binding_(WRegion *reg, + int act, uint state, uint kcb, + WSubmapState *st, + WRegion **binding_owner, WRegion **subreg) { - WBinding *binding=NULL; - WRegion *oreg=NULL, *binding_owner=NULL, *subreg=NULL; - bool grabbed; + WBinding *binding; - oreg=reg; - grabbed=(oreg->flags®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); @@ -283,7 +388,25 @@ void ioncore_do_handle_keypress(XKeyEvent *ev) WRegion *reg=(WRegion*)XWINDOW_REGION_OF(ev->window); if(reg!=NULL){ - if(do_key(reg, ev)) - submapgrab(reg); + Watch w=WATCH_INIT; + int grab; + + /* reg might be destroyed by binding handlers */ + watch_setup(&w, (Obj*)reg, NULL); + + grab=do_key(reg, ev); + + reg=(WRegion*)w.obj; + + if(reg!=NULL){ + if(grab==GRAB_SUBMAP) + submapgrab(reg); + else if(grab==GRAB_WAITRELEASE) + waitrelease(reg); + else if(grab==GRAB_NONE && reg->submapstat!=NULL) + clear_subs(reg); + } + + watch_reset(&w); } } diff --git a/ioncore/key.h b/ioncore/key.h index 35d8d55..059ca5d 100644 --- a/ioncore/key.h +++ b/ioncore/key.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_KEY_H @@ -14,6 +11,7 @@ #include +#include #include "common.h" #include "clientwin.h" @@ -21,4 +19,8 @@ extern void ioncore_do_handle_keypress(XKeyEvent *ev); extern void clientwin_quote_next(WClientWin *cwin); extern bool ioncore_current_key(uint *kcb, uint *state, bool *sub); +extern void region_free_submapstat(WRegion *reg); + +extern WHook *ioncore_submap_ungrab_hook; + #endif /* ION_IONCORE_KEY_H */ diff --git a/ioncore/llist.c b/ioncore/llist.c index 657a9e3..ecee912 100644 --- a/ioncore/llist.c +++ b/ioncore/llist.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include "common.h" diff --git a/ioncore/llist.h b/ioncore/llist.h index 32ac441..ebe71f8 100644 --- a/ioncore/llist.h +++ b/ioncore/llist.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_LLIST_H diff --git a/ioncore/manage.c b/ioncore/manage.c index 2eb6f38..bcc8a53 100644 --- a/ioncore/manage.c +++ b/ioncore/manage.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -74,8 +71,8 @@ static WPHolder *try_target(WClientWin *cwin, const WManageParams *param, if(r==NULL) return NULL; - - return region_prepare_manage(r, cwin, param, MANAGE_REDIR_PREFER_NO); + + return region_prepare_manage(r, cwin, param, MANAGE_PRIORITY_NONE); } @@ -118,7 +115,7 @@ static bool handle_target_winprops(WClientWin *cwin, const WManageParams *param, if(ph==NULL){ ph=region_prepare_manage(reg, cwin, param, - MANAGE_REDIR_PREFER_YES); + MANAGE_PRIORITY_NONE); if(ph==NULL) destroy_obj((Obj*)reg); @@ -159,7 +156,7 @@ static bool try_fullscreen(WClientWin *cwin, WScreen *dflt, if(fs_scr!=NULL){ WPHolder *fs_ph=region_prepare_manage((WRegion*)fs_scr, cwin, param, - MANAGE_REDIR_STRICT_NO); + MANAGE_PRIORITY_NOREDIR); if(fs_ph!=NULL){ int swf=(param->switchto ? PHOLDER_ATTACH_SWITCHTO : 0); @@ -208,8 +205,8 @@ bool clientwin_do_manage_default(WClientWin *cwin, if(ph==NULL){ /* Find a placeholder for non-fullscreen state */ ph=region_prepare_manage((WRegion*)scr, cwin, param, - MANAGE_REDIR_PREFER_YES); - + MANAGE_PRIORITY_NONE); + if(try_fullscreen(cwin, scr, param)){ if(pholder_target(ph)!=(WRegion*)region_screen_of((WRegion*)cwin)){ WRegion *grp=region_groupleader_of((WRegion*)cwin); @@ -245,29 +242,25 @@ bool clientwin_do_manage_default(WClientWin *cwin, WPHolder *region_prepare_manage(WRegion *reg, const WClientWin *cwin, - const WManageParams *param, int redir) + const WManageParams *param, int priority) { WPHolder *ret=NULL; CALL_DYN_RET(ret, WPHolder*, region_prepare_manage, reg, - (reg, cwin, param, redir)); + (reg, cwin, param, priority)); return ret; } WPHolder *region_prepare_manage_default(WRegion *reg, const WClientWin *cwin, - const WManageParams *param, int redir) + const WManageParams *param, int priority) { - WRegion *curr; - - if(redir==MANAGE_REDIR_STRICT_NO) - return NULL; - - curr=region_current(reg); + int cpriority=MANAGE_PRIORITY_SUB(priority, MANAGE_PRIORITY_NONE); + WRegion *curr=region_current(reg); if(curr==NULL) return NULL; - return region_prepare_manage(curr, cwin, param, MANAGE_REDIR_PREFER_YES); + return region_prepare_manage(curr, cwin, param, cpriority); } @@ -298,10 +291,10 @@ WPHolder *region_prepare_manage_transient_default(WRegion *reg, bool region_manage_clientwin(WRegion *reg, WClientWin *cwin, - const WManageParams *par, int redir) + const WManageParams *par, int priority) { bool ret; - WPHolder *ph=region_prepare_manage(reg, cwin, par, redir); + WPHolder *ph=region_prepare_manage(reg, cwin, par, priority); int swf=(par->switchto ? PHOLDER_ATTACH_SWITCHTO : 0); if(ph==NULL) diff --git a/ioncore/manage.h b/ioncore/manage.h index 45ddf6a..d0faed2 100644 --- a/ioncore/manage.h +++ b/ioncore/manage.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_MANAGE_H @@ -28,12 +25,29 @@ INTRSTRUCT(WManageParams); {FALSE, FALSE, FALSE, FALSE, FALSE, ForgetGravity, {0, 0, 0, 0}, NULL} enum{ - MANAGE_REDIR_PREFER_YES, - MANAGE_REDIR_PREFER_NO, - MANAGE_REDIR_STRICT_YES, - MANAGE_REDIR_STRICT_NO + MANAGE_PRIORITY_NONE, + MANAGE_PRIORITY_LOW, + MANAGE_PRIORITY_NORMAL, + MANAGE_PRIORITY_GROUP, + MANAGE_PRIORITY_NO, + /* Special */ + MANAGE_PRIORITY_NOREDIR }; +#define MANAGE_PRIORITY_OK(PRIORITY, OUR) \ + ((PRIORITY) <= (OUR) || (PRIORITY)==MANAGE_PRIORITY_NOREDIR) + +#define MANAGE_PRIORITY_SUB(PRIORITY, OUR) \ + ((PRIORITY)==MANAGE_PRIORITY_NOREDIR \ + ? MANAGE_PRIORITY_NO \ + : (PRIORITY) < (OUR) ? (OUR) : (PRIORITY)) + +#define MANAGE_PRIORITY_SUBX(PRIORITY, OUR) \ + ((PRIORITY)==MANAGE_PRIORITY_NOREDIR || (OUR) < (PRIORITY) \ + ? MANAGE_PRIORITY_NO \ + : MANAGE_PRIORITY_NONE) + + DECLSTRUCT(WManageParams){ bool switchto; bool jumpto; diff --git a/ioncore/modules.c b/ioncore/modules.c index 34d64c8..b49f95c 100644 --- a/ioncore/modules.c +++ b/ioncore/modules.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/modules.h b/ioncore/modules.h index 0d00e52..e73e108 100644 --- a/ioncore/modules.h +++ b/ioncore/modules.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_MODULES_H diff --git a/ioncore/mplex.c b/ioncore/mplex.c index 28dc48a..71943a4 100644 --- a/ioncore/mplex.c +++ b/ioncore/mplex.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -346,7 +343,7 @@ int mplex_get_index(WMPlex *mplex, WRegion *reg) /*EXTL_DOC - * Move \var{r} ''right'' within objects managed by \var{mplex} on list 1. + * Move \var{r} ``right'' within objects managed by \var{mplex} on list 1. */ EXTL_EXPORT_MEMBER void mplex_inc_index(WMPlex *mplex, WRegion *r) @@ -359,7 +356,7 @@ void mplex_inc_index(WMPlex *mplex, WRegion *r) /*EXTL_DOC - * Move \var{r} ''right'' within objects managed by \var{mplex} on list 1. + * Move \var{r} ``left'' within objects managed by \var{mplex} on list 1. */ EXTL_EXPORT_MEMBER void mplex_dec_index(WMPlex *mplex, WRegion *r) @@ -514,84 +511,126 @@ static void mplex_managed_rqgeom(WMPlex *mplex, WRegion *sub, /*{{{ Focus */ -static WStacking *mplex_do_to_focus(WMPlex *mplex, WStacking *to_try) -{ - WStacking *stacking=mplex_get_stacking(mplex); - WStacking *st=NULL; - - if(stacking==NULL) - return NULL; +typedef struct{ + WMPlex *mplex; + WStacking *to_try; + WStacking *group_st; + PtrList **hidelist; + bool try_hard; +} FiltData; - if(to_try!=NULL && (to_try->reg==NULL || !REGION_IS_MAPPED(to_try->reg))) - to_try=NULL; - - st=stacking_find_to_focus_mapped(stacking, to_try, NULL); - - if(st!=NULL) - return st; - else if(mplex->mx_current!=NULL) - return mplex->mx_current->st; - else - return NULL; -} - -static WStacking *maybe_focusable(WRegion *reg) +static WRegion *manager_within(WMPlex *mplex, WStacking *st) { - if(reg==NULL || !REGION_IS_MAPPED(reg)) - return NULL; - - return ioncore_find_stacking(reg); + return region_managed_within((WRegion*)mplex, st->reg); } -static WStacking *stacking_within(WMPlex *mplex, WRegion *reg) +static WStacking *stacking_within(WMPlex *mplex, WStacking *st) { - while(reg!=NULL && REGION_MANAGER(reg)!=(WRegion*)mplex) - reg=REGION_MANAGER(reg); + WRegion *reg=manager_within(mplex, st); - return maybe_focusable(reg); + return (reg==NULL + ? NULL + : (reg==st->reg + ? st + : ioncore_find_stacking(reg))); } -static WStacking *mplex_to_focus(WMPlex *mplex) +/* Mutually exclusive regions can't be pseudomodal */ +#define IS_PSEUDOMODAL(ST) ((ST)->lnode==NULL && (ST)->pseudomodal) + + +static bool mapped_pseudomodal_include_filt(WStacking *st, void *data_) { - WStacking *to_try=NULL; - WRegion *reg=NULL; + FiltData *data=(FiltData*)data_; + WStacking *stw; - to_try=maybe_focusable(REGION_ACTIVE_SUB(mplex)); + if(st->reg==NULL || !REGION_IS_MAPPED(st->reg)) + return FALSE; + + if(!data->hidelist + || (data->to_try==NULL && data->group_st==NULL) + || st->levelactive_next){ - to_try=stacking_within(mplex, reg); - if(to_try!=NULL) - break; - } + /* Ok, modal node in the way. Let's see if it is pseudomodal + * and can be hidden. + */ + + stw=stacking_within(data->mplex, st); + + /* This should not happen */ + if(stw==NULL || stw->reg==NULL) + return FALSE; + + /* The node is within the same group, so it can not be hidden. + * Latter case should not happen. + */ + if(stw==data->group_st || stw==data->to_try) + return TRUE; + + if(IS_PSEUDOMODAL(stw)){ + /* Don't insert multiple times. */ + return !ptrlist_reinsert_first(data->hidelist, stw); } + + return TRUE; +} + + +static bool mgr_pseudomodal_approve_filt(WStacking *st, void *data_) +{ + FiltData *data=(FiltData*)data_; - return mplex_do_to_focus(mplex, to_try); + return (data->group_st==NULL || st==data->group_st || + manager_within(data->mplex, st)==data->group_st->reg); } -static WStacking *mplex_do_to_focus_on(WMPlex *mplex, WStacking *node, - WStacking *to_try) +WStacking *mplex_find_to_focus(WMPlex *mplex, + WStacking *to_try, + WStacking *group_st, + PtrList **hidelist) { + WStackingFilter *fi=mapped_pseudomodal_include_filt; + WStackingFilter *fa=mgr_pseudomodal_approve_filt; WStacking *stacking=mplex_get_stacking(mplex); - WStacking *st=NULL; + FiltData data; + WStacking *st; if(stacking==NULL) return NULL; - + if(to_try!=NULL && (to_try->reg==NULL || !REGION_IS_MAPPED(to_try->reg))) to_try=NULL; - return stacking_find_to_focus_mapped(stacking, to_try, node->reg); + data.mplex=mplex; + data.to_try=to_try; + data.group_st=group_st; + data.hidelist=hidelist; + + st=stacking_find_to_focus(stacking, to_try, fi, fa, &data); + + if(st==NULL && hidelist!=NULL) + ptrlist_clear(hidelist); + + return st; +} + + +static WStacking *mplex_do_to_focus(WMPlex *mplex, WStacking *to_try, + PtrList **hidelist) +{ + return mplex_find_to_focus(mplex, to_try, NULL, hidelist); } -static WStacking *mplex_to_focus_on(WMPlex *mplex, WStacking *node, - WStacking *to_try) +static WStacking *mplex_do_to_focus_on(WMPlex *mplex, WStacking *node, + WStacking *to_try, + PtrList **hidelist) { WGroup *grp=OBJ_CAST(node->reg, WGroup); WStacking *st; @@ -599,17 +638,71 @@ static WStacking *mplex_to_focus_on(WMPlex *mplex, WStacking *node, if(grp!=NULL){ if(to_try==NULL) to_try=grp->current_managed; - st=mplex_do_to_focus_on(mplex, node, to_try); + st=mplex_find_to_focus(mplex, to_try, node, hidelist); if(st!=NULL || to_try!=NULL) return st; + if(hidelist!=NULL) + ptrlist_clear(hidelist); /* We don't know whether something is blocking focus here, * or if there was nothing to focus (as node->reg itself * isn't on the stacking list). */ } - st=mplex_do_to_focus(mplex, node); - return (st==node ? st : NULL); + st=mplex_do_to_focus(mplex, node, hidelist); + + if(st==node) + return st; + + if(hidelist!=NULL) + ptrlist_clear(hidelist); + + return NULL; +} + + +static WStacking *maybe_focusable(WRegion *reg) +{ + if(reg==NULL || !REGION_IS_MAPPED(reg)) + return NULL; + + return ioncore_find_stacking(reg); +} + + +static WStacking *has_stacking_within(WMPlex *mplex, WRegion *reg) +{ + while(reg!=NULL && REGION_MANAGER(reg)!=(WRegion*)mplex) + reg=REGION_MANAGER(reg); + + return maybe_focusable(reg); +} + + +static WStacking *mplex_to_focus(WMPlex *mplex) +{ + WStacking *to_try=NULL; + WRegion *reg=NULL; + WStacking *st; + + to_try=maybe_focusable(REGION_ACTIVE_SUB(mplex)); + + if(to_try==NULL){ + /* Search focus history */ + for(reg=ioncore_g.focus_current; reg!=NULL; reg=reg->active_next){ + to_try=has_stacking_within(mplex, reg); + if(to_try!=NULL) + break; + } + } + + st=mplex_do_to_focus(mplex, to_try, NULL); + + return (st!=NULL + ? st + : (mplex->mx_current!=NULL + ? mplex->mx_current->st + : NULL)); } @@ -726,7 +819,7 @@ static bool mplex_refocus(WMPlex *mplex, WStacking *node, bool warp) bool ret=TRUE; if(node!=NULL){ - foc=mplex_to_focus_on(mplex, node, NULL); + foc=mplex_do_to_focus_on(mplex, node, NULL, NULL); ret=(foc!=NULL); } @@ -746,24 +839,33 @@ bool mplex_do_prepare_focus(WMPlex *mplex, WStacking *node, WStacking *sub, int flags, WPrepareFocusResult *res) { + bool ew=(flags®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){ @@ -883,7 +985,8 @@ bool mplex_set_hidden(WMPlex *mplex, WRegion *reg, int sp) /*EXTL_DOC * Set the visibility of the region \var{reg} on \var{mplex} - * as specified with the parameter \var{how} (set/unset/toggle). + * as specified with the parameter \var{how} + * (one of \codestr{set}, \codestr{unset}, or \codestr{toggle}). * The resulting state is returned. */ EXTL_EXPORT_AS(WMPlex, set_hidden) @@ -1108,16 +1211,13 @@ bool mplex_do_attach_final(WMPlex *mplex, WRegion *reg, WMPlexPHolder *ph) : SIZEPOLICY_FULL_EXACT)); modal=(param->flags&MPLEX_ATTACH_LEVEL - ? param->level>=STACKING_LEVEL_MODAL1 - : param->flags&MPLEX_ATTACH_MODAL); + && param->level>=STACKING_LEVEL_MODAL1); level=(param->flags&MPLEX_ATTACH_LEVEL ? param->level - : (param->flags&MPLEX_ATTACH_MODAL - ? STACKING_LEVEL_MODAL1 - : (param->flags&MPLEX_ATTACH_UNNUMBERED - ? STACKING_LEVEL_NORMAL - : STACKING_LEVEL_BOTTOM))); + : (param->flags&MPLEX_ATTACH_UNNUMBERED + ? STACKING_LEVEL_NORMAL + : STACKING_LEVEL_BOTTOM)); hidden=(param->flags&MPLEX_ATTACH_HIDDEN && (param->flags&MPLEX_ATTACH_UNNUMBERED @@ -1160,6 +1260,7 @@ bool mplex_do_attach_final(WMPlex *mplex, WRegion *reg, WMPlexPHolder *ph) node->hidden=TRUE; node->szplcy=szplcy; node->level=level; + node->pseudomodal=(param->flags&MPLEX_ATTACH_PSEUDOMODAL ? 1 : 0); if(lnode!=NULL){ llist_link_after(&(mplex->mx_list), @@ -1283,17 +1384,20 @@ static void get_params(WMPlex *mplex, ExtlTab tab, int mask, { int layer=1; int tmp; + char *tmpstr; int ok=~mask; - if(extl_table_gets_i(tab, "level", &tmp)){ - if(tmp>=0 && ok&MPLEX_ATTACH_LEVEL){ - par->flags|=MPLEX_ATTACH_LEVEL; - par->level=tmp; + if(ok&MPLEX_ATTACH_LEVEL){ + if(extl_table_gets_i(tab, "level", &tmp)){ + if(tmp>=0){ + par->flags|=MPLEX_ATTACH_LEVEL; + par->level=tmp; + } } - } - if(extl_table_is_bool_set(tab, "modal")) - par->flags|=MPLEX_ATTACH_MODAL&ok; + if(extl_table_is_bool_set(tab, "modal")) + par->level=maxof(par->level, STACKING_LEVEL_MODAL1); + } if(extl_table_is_bool_set(tab, "unnumbered")) par->flags|=MPLEX_ATTACH_UNNUMBERED&ok; @@ -1303,12 +1407,23 @@ static void get_params(WMPlex *mplex, ExtlTab tab, int mask, if(extl_table_is_bool_set(tab, "hidden")) par->flags|=MPLEX_ATTACH_HIDDEN&ok; + + if(extl_table_is_bool_set(tab, "pseudomodal")) + par->flags|=MPLEX_ATTACH_PSEUDOMODAL&ok; if(extl_table_gets_i(tab, "index", &(par->index))) par->flags|=MPLEX_ATTACH_INDEX&ok; - if(extl_table_gets_i(tab, "sizepolicy", &tmp)){ - if(ok&MPLEX_ATTACH_SIZEPOLICY){ + if(ok&MPLEX_ATTACH_SIZEPOLICY){ + if(extl_table_gets_s(tab, "sizepolicy", &tmpstr)){ + WSizePolicy tmpp; + if(string2sizepolicy(tmpstr, &tmpp)){ + par->flags|=MPLEX_ATTACH_SIZEPOLICY; + par->szplcy=tmpp; + } + free(tmpstr); + }else if(extl_table_gets_i(tab, "sizepolicy", &tmp)){ + /* Backwards compat. numeric version */ par->flags|=MPLEX_ATTACH_SIZEPOLICY; par->szplcy=tmp; } @@ -1374,7 +1489,11 @@ WRegion *mplex_attach_new_(WMPlex *mplex, WMPlexAttachParams *par, * \var{hidden} & (boolean) Attach hidden, if not prevented * by e.g. the mutually exclusive list being empty. * This option overrides \var{switchto}. \\ - * \var{sizepolicy} & (integer) Size policy. \\ + * \var{pseudomodal} & (boolean) The attached region is ``pseudomodal'' + * if the stacking level dictates it to be modal. + * This means that the region may be hidden to display + * regions with lesser stacking levels. \\ + * \var{sizepolicy} & (string) Size policy; see Section \ref{sec:sizepolicies}. \\ * \var{geom} & (table) Geometry specification. \\ * \end{tabularx} * @@ -1410,33 +1529,32 @@ static bool mplex_handle_drop(WMPlex *mplex, int x, int y, WPHolder *mplex_prepare_manage(WMPlex *mplex, const WClientWin *cwin, - const WManageParams *param, int redir) + const WManageParams *param, int priority) { + int cpriority=MANAGE_PRIORITY_SUB(priority, MANAGE_PRIORITY_NORMAL); WMPlexAttachParams ap; WPHolder *ph=NULL; WMPlexPHolder *mph; WLListNode *after; - if(redir==MANAGE_REDIR_STRICT_YES || redir==MANAGE_REDIR_PREFER_YES){ + /* Check current */ { WStacking *cur=mplex_current_node(mplex); if(cur!=NULL){ - ph=region_prepare_manage(cur->reg, cwin, param, - MANAGE_REDIR_PREFER_YES); + ph=region_prepare_manage(cur->reg, cwin, param, cpriority); if(ph!=NULL) return ph; } if(mplex->mx_current!=NULL && mplex->mx_current->st!=cur){ ph=region_prepare_manage(mplex->mx_current->st->reg, - cwin, param, - MANAGE_REDIR_PREFER_YES); + cwin, param, cpriority); if(ph!=NULL) return ph; } } - if(redir==MANAGE_REDIR_STRICT_YES) + if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_NORMAL)) return NULL; ap.flags=((param->switchto ? MPLEX_ATTACH_SWITCHTO : 0) @@ -1655,12 +1773,13 @@ static bool do_attach_stdisp(WRegion *mplex, WRegion *reg, void *unused) * \begin{tabularx}{\linewidth}{lX} * \tabhead{Field & Description} * \var{pos} & The corner of the screen to place the status display - * in. One of \code{tl}, \code{tr}, \var{bl} or \var{br}. \\ - * \var{action} & If this field is set to \code{keep}, \var{corner} + * in: one of \codestr{tl}, \codestr{tr}, \codestr{bl} + * or \codestr{br}. \\ + * \var{action} & If this field is set to \codestr{keep}, \var{corner} * and \var{orientation} are changed for the existing - * status display. If this field is set to \var{remove}, + * status display. If this field is set to \codestr{remove}, * the existing status display is removed. If this - * field is not set or is set to \code{replace}, a + * field is not set or is set to \codestr{replace}, a * new status display is created and the old, if any, * removed. \\ * \end{tabularx} @@ -1891,13 +2010,16 @@ static void save_node(WMPlex *mplex, ExtlTab subs, int *n, if(st!=extl_table_none()){ if(mplex->mx_current!=NULL && node==mplex->mx_current->st) extl_table_sets_b(st, "switchto", TRUE); - extl_table_sets_i(st, "sizepolicy", node->szplcy); + extl_table_sets_s(st, "sizepolicy", + sizepolicy2string(node->szplcy)); extl_table_sets_i(st, "level", node->level); g=extl_table_from_rectangle(®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); diff --git a/ioncore/mplex.h b/ioncore/mplex.h index 21e4a81..08289f0 100644 --- a/ioncore/mplex.h +++ b/ioncore/mplex.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_MPLEX_H @@ -33,7 +30,7 @@ #define MPLEX_ATTACH_SWITCHTO 0x0001 /* switch to region */ #define MPLEX_ATTACH_UNNUMBERED 0x0002 /* do not put on mut.ex list */ #define MPLEX_ATTACH_HIDDEN 0x0004 /* should be hidden */ -#define MPLEX_ATTACH_MODAL 0x0008 /* shortcut.. */ +#define MPLEX_ATTACH_PSEUDOMODAL 0x0004 /* pseudomodal (if modal) */ #define MPLEX_ATTACH_LEVEL 0x0010 /* level field set */ #define MPLEX_ATTACH_GEOM 0x0020 /* geometry field is set */ #define MPLEX_ATTACH_SIZEPOLICY 0x0040 /* size policy field is set */ diff --git a/ioncore/mplexpholder.c b/ioncore/mplexpholder.c index 478ac2d..623b60a 100644 --- a/ioncore/mplexpholder.c +++ b/ioncore/mplexpholder.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/mplexpholder.h b/ioncore/mplexpholder.h index 5a98922..be49317 100644 --- a/ioncore/mplexpholder.h +++ b/ioncore/mplexpholder.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_MPLEXPHOLDER_H diff --git a/ioncore/mwmhints.c b/ioncore/mwmhints.c index 2c2269c..a2bb33d 100644 --- a/ioncore/mwmhints.c +++ b/ioncore/mwmhints.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include "common.h" diff --git a/ioncore/mwmhints.h b/ioncore/mwmhints.h index 09571f3..9a64eb3 100644 --- a/ioncore/mwmhints.h +++ b/ioncore/mwmhints.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_MWMHINTS_H diff --git a/ioncore/names.c b/ioncore/names.c index 5f3c386..b7a8668 100644 --- a/ioncore/names.c +++ b/ioncore/names.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ @@ -449,7 +446,7 @@ bool clientwin_register(WClientWin *cwin) /*EXTL_DOC * Set the name of \var{reg} to \var{p}. If the name is already in use, - * an instance number suffix \code{} will be attempted. If \var{p} has + * an instance number suffix \codestr{} will be attempted. If \var{p} has * such a suffix, it will be modified, otherwise such a suffix will be * added. Setting \var{p} to nil will cause current name to be removed. */ @@ -466,7 +463,7 @@ bool region_set_name(WRegion *reg, const char *p) /*EXTL_DOC * Similar to \fnref{WRegion.set_name} except if the name is already in use, * other instance numbers will not be attempted. The string \var{p} should - * not contain a \code{} suffix or this function will fail. + * not contain a \codestr{} suffix or this function will fail. */ EXTL_EXPORT_MEMBER bool region_set_name_exact(WRegion *reg, const char *p) diff --git a/ioncore/names.h b/ioncore/names.h index 57dd5aa..b35bc60 100644 --- a/ioncore/names.h +++ b/ioncore/names.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_NAMES_H diff --git a/ioncore/navi.c b/ioncore/navi.c index 7109038..3ce27d3 100644 --- a/ioncore/navi.c +++ b/ioncore/navi.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2006-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -230,8 +227,9 @@ static WRegion *release(WRegionNaviData *data, WRegion *res) /*EXTL_DOC * Find region next from \var{reg} in direction \var{dirstr} - * (up/down/left/right/next/prev/any). The table \var{param} may - * contain the boolean field \var{nowrap}, instructing not to wrap + * (\codestr{up}, \codestr{down}, \codestr{left}, \codestr{right}, + * \codestr{next}, \codestr{prev}, or \codestr{any}). The table \var{param} + * may contain the boolean field \var{nowrap}, instructing not to wrap * around, and the \type{WRegion}s \var{no_ascend} and \var{no_descend}, * and boolean functions \var{ascend_filter} and \var{descend_filter} * on \var{WRegion} pairs (\var{to}, \var{from}), are used to decide when @@ -264,9 +262,8 @@ WRegion *ioncore_navi_next(WRegion *reg, const char *dirstr, ExtlTab param) /*EXTL_DOC - * Find first region within \var{reg} in direction \var{dirstr} - * (up/down/left/right/beg/end/any). For information on \var{param}, - * see \fnref{ioncore.navi_next}. + * Find first region within \var{reg} in direction \var{dirstr}. + * For information on \var{param}, see \fnref{ioncore.navi_next}. */ EXTL_EXPORT WRegion *ioncore_navi_first(WRegion *reg, const char *dirstr, ExtlTab param) @@ -296,11 +293,10 @@ static WRegion *do_goto(WRegion *res) /*EXTL_DOC - * Go to region next from \var{reg} in direction \var{dirstr} - * (up/down/left/right/next/prev/any). For information on \var{param}, - * see \fnref{ioncore.navi_next}. Additionally this function supports - * the boolean \var{nofront} field, for not bringing the object to - * front. + * Go to region next from \var{reg} in direction \var{dirstr}. + * For information on \var{param}, see \fnref{ioncore.navi_next}. + * Additionally this function supports the boolean \var{nofront} + * field, for not bringing the object to front. */ EXTL_EXPORT WRegion *ioncore_goto_next(WRegion *reg, const char *dirstr, ExtlTab param) @@ -310,11 +306,10 @@ WRegion *ioncore_goto_next(WRegion *reg, const char *dirstr, ExtlTab param) /*EXTL_DOC - * Go to first region within \var{reg} in direction \var{dirstr} - * (up/down/left/right/beg/end/any). For information on \var{param}, - * see \fnref{ioncore.navi_next}. Additionally this function supports - * the boolean \var{nofront} field, for not bringing the object to - * front. + * Go to first region within \var{reg} in direction \var{dirstr}. + * For information on \var{param}, see \fnref{ioncore.navi_next}. + * Additionally this function supports the boolean \var{nofront} field, + * for not bringing the object to front. */ EXTL_EXPORT WRegion *ioncore_goto_first(WRegion *reg, const char *dirstr, ExtlTab param) diff --git a/ioncore/navi.h b/ioncore/navi.h index b1ed6a0..c86a3a4 100644 --- a/ioncore/navi.h +++ b/ioncore/navi.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2006-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_NAVI_H diff --git a/ioncore/netwm.c b/ioncore/netwm.c index 4f65cdf..07e1dee 100644 --- a/ioncore/netwm.c +++ b/ioncore/netwm.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/netwm.h b/ioncore/netwm.h index 312f96b..1203e23 100644 --- a/ioncore/netwm.h +++ b/ioncore/netwm.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_NETWM_H diff --git a/ioncore/pholder.c b/ioncore/pholder.c index 018de2b..f5f9aae 100644 --- a/ioncore/pholder.c +++ b/ioncore/pholder.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/pholder.h b/ioncore/pholder.h index 4ccc654..b2b4986 100644 --- a/ioncore/pholder.h +++ b/ioncore/pholder.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2005-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_PHOLDER_H diff --git a/ioncore/pointer.c b/ioncore/pointer.c index f1dc9e7..63a408e 100644 --- a/ioncore/pointer.c +++ b/ioncore/pointer.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include "common.h" diff --git a/ioncore/pointer.h b/ioncore/pointer.h index 7b73cdb..cd1a62b 100644 --- a/ioncore/pointer.h +++ b/ioncore/pointer.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_POINTER_H diff --git a/ioncore/presize.c b/ioncore/presize.c index 5b16ba4..fb121d9 100644 --- a/ioncore/presize.c +++ b/ioncore/presize.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include "presize.h" diff --git a/ioncore/presize.h b/ioncore/presize.h index a480033..79133ed 100644 --- a/ioncore/presize.h +++ b/ioncore/presize.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_PRESIZE_H diff --git a/ioncore/property.c b/ioncore/property.c index 798dbf5..57214d2 100644 --- a/ioncore/property.c +++ b/ioncore/property.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -218,13 +215,8 @@ void xwindow_set_text_property(Window win, Atom a, const char **ptr, int n) if(!ioncore_g.use_mb){ st=XStringListToTextProperty((char **)&ptr, n, &prop); }else{ -#ifdef X_HAVE_UTF8_STRING - st=XmbTextListToTextProperty(ioncore_g.dpy, (char **)ptr, n, - XUTF8StringStyle, &prop); -#else st=XmbTextListToTextProperty(ioncore_g.dpy, (char **)ptr, n, XTextStyle, &prop); -#endif st=!st; } @@ -340,7 +332,7 @@ static bool get_mode(const char *mode, int *m) /*EXTL_DOC * Modify a window property. The \var{mode} is one of - * \code{"replace"}, \code{"prepend"} or \code{"append"}, and format + * \codestr{replace}, \codestr{prepend} or \codestr{append}, and format * is either 8, 16 or 32. Also see \fnref{ioncore.x_get_window_property} * and the \code{XChangeProperty}(3) manual page. */ @@ -382,8 +374,7 @@ void ioncore_x_delete_property(int win, int atom) /*EXTL_DOC - * Get a text property for a window (\code{STRING}, \code{COMPOUND_TEXT}, - * or \code{UTF8_STRING} property converted). The fields in the returned + * Get a text property for a window. The fields in the returned * table (starting from 1) are the null-separated parts of the property. * See the \code{XGetTextProperty}(3) manual page for more information. */ diff --git a/ioncore/property.h b/ioncore/property.h index cb9252e..aeb8182 100644 --- a/ioncore/property.h +++ b/ioncore/property.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_PROPERTY_H diff --git a/ioncore/rectangle.c b/ioncore/rectangle.c index 50dcc09..3096cd9 100644 --- a/ioncore/rectangle.c +++ b/ioncore/rectangle.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/rectangle.h b/ioncore/rectangle.h index 701d2b2..fa0a2b2 100644 --- a/ioncore/rectangle.h +++ b/ioncore/rectangle.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_RECTANGLE_H diff --git a/ioncore/regbind.c b/ioncore/regbind.c index 0b2f371..68ef792 100644 --- a/ioncore/regbind.c +++ b/ioncore/regbind.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -199,7 +196,8 @@ void region_remove_bindings(WRegion *reg) } -WBinding *region_lookup_keybinding(WRegion *reg, const XKeyEvent *ev, +WBinding *region_lookup_keybinding(WRegion *reg, + int act, uint state, uint kcb, const WSubmapState *sc, WRegion **binding_owner_ret) { @@ -233,7 +231,7 @@ WBinding *region_lookup_keybinding(WRegion *reg, const XKeyEvent *ev, continue; } - binding=bindmap_lookup_binding(bindmap, BINDING_KEYPRESS, ev->state, ev->keycode); + binding=bindmap_lookup_binding(bindmap, act, state, kcb); if(binding!=NULL) break; diff --git a/ioncore/regbind.h b/ioncore/regbind.h index ad1fe6d..adf78ff 100644 --- a/ioncore/regbind.h +++ b/ioncore/regbind.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_REGBIND_H @@ -21,6 +18,8 @@ DECLSTRUCT(WSubmapState){ uint key, state; WSubmapState *next; + /* ExtlFn leave; */ + /* Watch leave_reg; */ }; @@ -29,7 +28,8 @@ extern void region_remove_bindmap(WRegion *reg, WBindmap *bindmap); extern void region_remove_bindings(WRegion *reg); -extern WBinding *region_lookup_keybinding(WRegion *reg, const XKeyEvent *ev, +extern WBinding *region_lookup_keybinding(WRegion *reg, + int act, uint state, uint kcb, const WSubmapState *sc, WRegion **binding_owner_ret); extern WBinding *region_lookup_binding(WRegion *reg, int act, uint state, diff --git a/ioncore/reginfo.c b/ioncore/reginfo.c index 9815880..41fc8d6 100644 --- a/ioncore/reginfo.c +++ b/ioncore/reginfo.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/reginfo.h b/ioncore/reginfo.h index 0a75a98..6e5ffb5 100644 --- a/ioncore/reginfo.h +++ b/ioncore/reginfo.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_REGINFO_H diff --git a/ioncore/region-iter.h b/ioncore/region-iter.h index 157ab7d..f012d23 100644 --- a/ioncore/region-iter.h +++ b/ioncore/region-iter.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_REGION_ITER_H diff --git a/ioncore/region.c b/ioncore/region.c index 10f7c28..ebec9e7 100644 --- a/ioncore/region.c +++ b/ioncore/region.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -27,6 +24,7 @@ #include "activity.h" #include "region-iter.h" #include "return.h" +#include "key.h" #define D2(X) @@ -112,7 +110,9 @@ void region_deinit(WRegion *reg) D(warn("Region to be focused next destroyed[1].")); ioncore_g.focus_next=NULL; } - + + assert(reg->submapstat==NULL); + /*region_free_submapstat(reg);*/ region_detach_manager(reg); region_unset_return(reg); region_unset_parent(reg); @@ -235,7 +235,7 @@ void region_managed_remove(WRegion *mgr, WRegion *reg) /*EXTL_DOC - * Return the object, if any, that is considered ''currently active'' + * Return the object, if any, that is considered ``currently active'' * within the objects managed by \var{mplex}. */ EXTL_SAFE @@ -382,8 +382,8 @@ static void region_rqclose_default(WRegion *reg, bool relocate) * the client supports the \code{WM_DELETE} protocol (see also * \fnref{WClientWin.kill}). The region will not be destroyed when * this function returns. To find out if and when it is destroyed, - * use the "deinit" notification. If \var{relocate} is not set, and - * \var{reg} manages other regions, it will not be closed. Otherwise + * use the \codestr{deinit} notification. If \var{relocate} is not set, + * and \var{reg} manages other regions, it will not be closed. Otherwise * the managed regions will be attempted to be relocated. */ EXTL_EXPORT_MEMBER @@ -742,7 +742,7 @@ bool region_rqorder(WRegion *reg, WRegionOrder order) /*EXTL_DOC * Request ordering. Currently supported values for \var{ord} - * are 'front' and 'back'. + * are \codestr{front} and \codestr{back}. */ EXTL_EXPORT_AS(WRegion, rqorder) bool region_rqorder_extl(WRegion *reg, const char *ord) diff --git a/ioncore/region.h b/ioncore/region.h index 33baf48..82483ad 100644 --- a/ioncore/region.h +++ b/ioncore/region.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_REGION_H diff --git a/ioncore/resize.c b/ioncore/resize.c index ec94cda..22950ee 100644 --- a/ioncore/resize.c +++ b/ioncore/resize.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/resize.h b/ioncore/resize.h index c56b964..2c69ed9 100644 --- a/ioncore/resize.h +++ b/ioncore/resize.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_RESIZE_H diff --git a/ioncore/return.c b/ioncore/return.c index 444f548..092483c 100644 --- a/ioncore/return.c +++ b/ioncore/return.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/return.h b/ioncore/return.h index 6870f18..0d20b92 100644 --- a/ioncore/return.h +++ b/ioncore/return.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_RETURN_H diff --git a/ioncore/rootwin.c b/ioncore/rootwin.c index a1db720..f9b6905 100644 --- a/ioncore/rootwin.c +++ b/ioncore/rootwin.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/rootwin.h b/ioncore/rootwin.h index 74e50bd..8e8bf7d 100644 --- a/ioncore/rootwin.h +++ b/ioncore/rootwin.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_ROOTWIN_H diff --git a/ioncore/saveload.c b/ioncore/saveload.c index b179ccf..db8a12f 100644 --- a/ioncore/saveload.c +++ b/ioncore/saveload.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/saveload.h b/ioncore/saveload.h index bc2ad6c..d15992e 100644 --- a/ioncore/saveload.h +++ b/ioncore/saveload.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_SAVELOAD_H diff --git a/ioncore/screen-notify.c b/ioncore/screen-notify.c index e65208a..add918d 100644 --- a/ioncore/screen-notify.c +++ b/ioncore/screen-notify.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -377,11 +374,10 @@ void screen_managed_notify(WScreen *scr, WRegion *reg, WRegionNotify how) void ioncore_screen_activity_notify(WRegion *reg, WRegionNotify how) { if(how==ioncore_g.notifies.activity){ - WScreen *scr=region_screen_of(reg); - - screen_update_infowin(scr); - screen_update_notifywin(scr); - + screen_update_notifywin(region_screen_of(reg)); + }else if(how==ioncore_g.notifies.name){ + if(region_is_activity(reg)) + screen_update_notifywin(region_screen_of(reg)); } } diff --git a/ioncore/screen-notify.h b/ioncore/screen-notify.h index d5f27cd..a7b37b8 100644 --- a/ioncore/screen-notify.h +++ b/ioncore/screen-notify.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_SCREEN_NOTIFY_H diff --git a/ioncore/screen.c b/ioncore/screen.c index 00d675f..8d59d12 100644 --- a/ioncore/screen.c +++ b/ioncore/screen.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/screen.h b/ioncore/screen.h index 8c1b9b5..743a134 100644 --- a/ioncore/screen.h +++ b/ioncore/screen.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_SCREEN_H diff --git a/ioncore/selection.c b/ioncore/selection.c index 3941436..95bf225 100644 --- a/ioncore/selection.c +++ b/ioncore/selection.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/selection.h b/ioncore/selection.h index 7710e08..fc2437a 100644 --- a/ioncore/selection.h +++ b/ioncore/selection.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_SELECTION_H diff --git a/ioncore/sizehint.c b/ioncore/sizehint.c index ee5560f..0dc0702 100644 --- a/ioncore/sizehint.c +++ b/ioncore/sizehint.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -70,11 +67,11 @@ static void correct_aspect(int max_w, int max_h, const WSizeHints *hints, void sizehints_correct(const WSizeHints *hints, int *wp, int *hp, bool min, bool override_no_constrain) { - int w=*wp, wa; - int h=*hp, ha; + int w=*wp, tw, bw=(hints->base_set ? hints->base_width : 0); + int h=*hp, th, bh=(hints->base_set ? hints->base_height : 0); int bs=0; - if(min){ + if(min && hints->min_set){ w=maxof(w, hints->min_width); h=maxof(h, hints->min_height); } @@ -84,30 +81,27 @@ void sizehints_correct(const WSizeHints *hints, int *wp, int *hp, *hp=h; return; } - - wa=w-hints->base_width; - ha=h-hints->base_height; - if(wa>=0 && ha>=0){ - correct_aspect(wa, ha, hints, &wa, &ha); - w=wa+hints->base_width; - h=ha+hints->base_height; + tw=w-bw; + th=h-bh; + + if(tw>=0 && th>=0) + correct_aspect(tw, th, hints, &tw, &th); + + if(hints->inc_set){ + if(tw>0) + tw=(tw/hints->width_inc)*hints->width_inc; + if(th>0) + th=(th/hints->height_inc)*hints->height_inc; } + w=tw+bw; + h=th+bh; + if(hints->max_set){ w=minof(w, hints->max_width); h=minof(h, hints->max_height); } - - if(hints->inc_set){ - /* base size should be set to 0 if none given by user program */ - bs=(hints->base_set ? hints->base_width : 0); - if(w>bs) - w=((w-bs)/hints->width_inc)*hints->width_inc+bs; - bs=(hints->base_set ? hints->base_height : 0); - if(h>bs) - h=((h-bs)/hints->height_inc)*hints->height_inc+bs; - } *wp=w; *hp=h; @@ -132,22 +126,17 @@ void xsizehints_sanity_adjust(XSizeHints *hints) } } - if(hints->min_width<0) - hints->min_width=0; - if(hints->min_height<0) - hints->min_height=0; + hints->min_width=maxof(hints->min_width, 0); + hints->min_height=maxof(hints->min_height, 0); if(!(hints->flags&PBaseSize) || hints->base_width<0) - hints->base_width=0; + hints->base_width=hints->min_width; if(!(hints->flags&PBaseSize) || hints->base_height<0) - hints->base_height=0; - + hints->base_height=hints->min_height; if(hints->flags&PMaxSize){ - if(hints->max_widthmin_width) - hints->max_width=hints->min_width; - if(hints->max_heightmin_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); diff --git a/ioncore/sizehint.h b/ioncore/sizehint.h index 4ddfb41..55f3f29 100644 --- a/ioncore/sizehint.h +++ b/ioncore/sizehint.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_SIZEHINT_H diff --git a/ioncore/sizepolicy.c b/ioncore/sizepolicy.c index 7101da8..a99b7a3 100644 --- a/ioncore/sizepolicy.c +++ b/ioncore/sizepolicy.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -283,14 +280,8 @@ void sizepolicy(WSizePolicy *szplcy, WRegion *reg, } -struct szplcy_spec { - const char *spec; - int szplcy; -}; - - /* translation table for sizepolicy specifications */ -static struct szplcy_spec szplcy_specs[] = { +static StringIntMap szplcy_specs[] = { {"default", SIZEPOLICY_DEFAULT}, {"full", SIZEPOLICY_FULL_EXACT}, {"full_bounds", SIZEPOLICY_FULL_BOUNDS}, @@ -324,17 +315,21 @@ static struct szplcy_spec szplcy_specs[] = { bool string2sizepolicy(const char *szplcy, WSizePolicy *value) { - const struct szplcy_spec *sp; + int tmp; - *value=SIZEPOLICY_DEFAULT; - - for(sp=szplcy_specs; sp->spec; ++sp){ - if(strcasecmp(szplcy,sp->spec)==0){ - *value=sp->szplcy; - return TRUE; - } - } + tmp=stringintmap_value(szplcy_specs, szplcy, -1); - return FALSE; + if(tmp==-1){ + *value=SIZEPOLICY_DEFAULT; + return FALSE; + }else{ + *value=tmp; + return TRUE; + } } + +const char *sizepolicy2string(WSizePolicy szplcy) +{ + return stringintmap_key(szplcy_specs, szplcy, NULL); +} diff --git a/ioncore/sizepolicy.h b/ioncore/sizepolicy.h index 602652d..a0aa1e3 100644 --- a/ioncore/sizepolicy.h +++ b/ioncore/sizepolicy.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_SIZEPOLICY_H @@ -72,7 +69,7 @@ extern void sizepolicy(WSizePolicy *szplcy, WRegion *reg, WFitParams *fp); -bool string2sizepolicy(const char *szplcy, WSizePolicy *value); - +extern bool string2sizepolicy(const char *szplcy, WSizePolicy *value); +extern const char *sizepolicy2string(WSizePolicy szplcy); #endif /* ION_IONCORE_SIZEPOLICY_H */ diff --git a/ioncore/stacking.c b/ioncore/stacking.c index 9d77ac9..9c0be9f 100644 --- a/ioncore/stacking.c +++ b/ioncore/stacking.c @@ -3,13 +3,11 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include +#include #include "common.h" #include "region.h" @@ -32,6 +30,7 @@ WStacking *create_stacking() st->szplcy=SIZEPOLICY_DEFAULT; st->hidden=FALSE; st->lnode=NULL; + st->pseudomodal=FALSE; } return st; @@ -521,8 +520,8 @@ uint stacking_min_level(WStacking *stacking, WStackingFilter *include_filt, void *filt_data) { + uint min_level=STACKING_LEVEL_BOTTOM; WStacking *st=NULL; - uint min_level=0; if(stacking==NULL) return STACKING_LEVEL_BOTTOM; @@ -546,35 +545,39 @@ uint stacking_min_level(WStacking *stacking, } -WStacking *stacking_find_to_focus(WStacking *stacking, WStacking *to_try, +WStacking *stacking_find_to_focus(WStacking *stacking, + WStacking *to_try, WStackingFilter *include_filt, WStackingFilter *approve_filt, void *filt_data) { + uint min_level=STACKING_LEVEL_BOTTOM; WStacking *st=NULL; - uint min_level=0; if(stacking==NULL) return NULL; - min_level=stacking_min_level(stacking, include_filt, filt_data); - - if(to_try!=NULL && to_try->level>=min_level) - return to_try; - st=stacking; do{ st=st->prev; - if(st->levelreg==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->levellevel>=STACKING_LEVEL_MODAL1) + min_level=maxof(min_level, st->level); }while(st!=stacking); return NULL; diff --git a/ioncore/stacking.h b/ioncore/stacking.h index 2810bda..e325269 100644 --- a/ioncore/stacking.h +++ b/ioncore/stacking.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_STACKING_H @@ -22,8 +19,8 @@ #define STACKING_LEVEL_ON_TOP 2 #define STACKING_LEVEL_MODAL1 1024 - #define STACKING_IS_HIDDEN(ST) ((ST)->hidden) +#define STACKING_IS_PSEUDOMODAL(ST) ((ST)->pseudomodal) DECLSTRUCT(WStacking){ @@ -37,6 +34,7 @@ DECLSTRUCT(WStacking){ /* flags */ uint to_unweave:2; uint hidden:1; + uint pseudomodal:1; /* WMPlex stuff */ WLListNode *lnode; diff --git a/ioncore/strings.c b/ioncore/strings.c index 37487fd..eb7e408 100644 --- a/ioncore/strings.c +++ b/ioncore/strings.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/strings.h b/ioncore/strings.h index df30189..e285085 100644 --- a/ioncore/strings.h +++ b/ioncore/strings.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_STRINGS_H diff --git a/ioncore/tags.c b/ioncore/tags.c index f01385d..6f1e029 100644 --- a/ioncore/tags.c +++ b/ioncore/tags.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -46,7 +43,8 @@ bool region_set_tagged(WRegion *reg, int sp) /*EXTL_DOC * Change tagging state of \var{reg} as defined by \var{how} - * (set/unset/toggle). Resulting state is returned. + * (one of \codestr{set}, \codestr{unset}, or \codestr{toggle}). + * The resulting state is returned. */ EXTL_EXPORT_AS(WRegion, set_tagged) bool region_set_tagged_extl(WRegion *reg, const char *how) @@ -84,7 +82,7 @@ void ioncore_tagged_clear() /*EXTL_DOC - * Returns first tagged object, untagging it as well if \var{untag}is set. + * Returns first tagged object, untagging it as well if \var{untag} is set. */ EXTL_SAFE EXTL_EXPORT diff --git a/ioncore/tags.h b/ioncore/tags.h index 6f30292..43a9b1f 100644 --- a/ioncore/tags.h +++ b/ioncore/tags.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_TAGS_H diff --git a/ioncore/window.c b/ioncore/window.c index 0b12200..3de0eef 100644 --- a/ioncore/window.c +++ b/ioncore/window.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/window.h b/ioncore/window.h index e4de5bb..b605485 100644 --- a/ioncore/window.h +++ b/ioncore/window.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_WINDOW_H diff --git a/ioncore/xic.c b/ioncore/xic.c index 21339d6..2fe2238 100644 --- a/ioncore/xic.c +++ b/ioncore/xic.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/xic.h b/ioncore/xic.h index f745442..1e935ac 100644 --- a/ioncore/xic.h +++ b/ioncore/xic.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_XIC_H diff --git a/ioncore/xwindow.c b/ioncore/xwindow.c index 9d4cea7..b9cd1aa 100644 --- a/ioncore/xwindow.c +++ b/ioncore/xwindow.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/ioncore/xwindow.h b/ioncore/xwindow.h index 6379ddf..2e37fc6 100644 --- a/ioncore/xwindow.h +++ b/ioncore/xwindow.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_IONCORE_XWINDOW_H diff --git a/libextl/exact-version b/libextl/exact-version index 66bf973..24226a2 100644 --- a/libextl/exact-version +++ b/libextl/exact-version @@ -1,6 +1,23 @@ Context: +[Use S if not copy +Tuomo Valkonen **20070506140705] + +[Added extl_table_iter +Tuomo Valkonen **20070430164248] + +[Added ExtlAny +Tuomo Valkonen **20070430162426] + +[Cleanup/reorganisation +Tuomo Valkonen **20070430144940] + +[Don't put functions into documentation index +Tuomo Valkonen **20070408124504 + (The function list should suffice.) +] + [Improved mechanisms for unregistration of functions. Tuomo Valkonen **20070226150118 Makes for a bit smaller memory footprint. diff --git a/libextl/libextl-mkexports.in b/libextl/libextl-mkexports.in index bbb672d..a23ab1f 100644 --- a/libextl/libextl-mkexports.in +++ b/libextl/libextl-mkexports.in @@ -69,6 +69,7 @@ desc2human={ ["o"]="object", ["s"]="string", ["S"]="string", + ["a"]="any value", } -- }}} @@ -619,12 +620,14 @@ function write_fndoc(h, fn, info) fn=info.exported_name end + --[[ if info.class~="global" then fprintf(h, "\\index{%s@%s!", texfriendly(info.class), texfriendly_typeormod(info.class)); fprintf(h, "%s@\\code{%s}}\n", texfriendly(fn), fn) end fprintf(h, "\\index{%s@\\code{%s}}\n", texfriendly(fn), fn) + ]] if info.class~="global" then fprintf(h, "\\hyperlabel{fn:%s.%s}", info.class, fn) diff --git a/libextl/luaextl.c b/libextl/luaextl.c index a2cc2b9..b58545d 100644 --- a/libextl/luaextl.c +++ b/libextl/luaextl.c @@ -637,7 +637,7 @@ void extl_deinit() /*}}}*/ -/*{{{ Stack get/push -- all unsafe */ +/*{{{ Stack get/push -- all unsafe */ static bool extl_stack_get(lua_State *st, int pos, char type, @@ -649,11 +649,18 @@ static bool extl_stack_get(lua_State *st, int pos, char type, if(wasdeadobject!=NULL) *wasdeadobject=FALSE; + + if(type=='b'){ + if(valret) + *((bool*)valret)=lua_toboolean(st, pos); + return TRUE; + } - if(type=='i' || type=='d'){ - if(lua_type(st, pos)!=LUA_TNUMBER) + switch(lua_type(st, pos)){ + case LUA_TNUMBER: + if(type!='i' && type!='d' && type!='a') return FALSE; - + d=lua_tonumber(st, pos); if(type=='i'){ @@ -661,21 +668,23 @@ static bool extl_stack_get(lua_State *st, int pos, char type, return FALSE; if(valret) *((int*)valret)=d; + }else if(type=='a'){ + if(valret){ + ((ExtlAny*)valret)->type='d'; + ((ExtlAny*)valret)->value.d=d; + } }else{ if(valret) *((double*)valret)=d; } return TRUE; - } - - if(type=='b'){ - if(valret) - *((bool*)valret)=lua_toboolean(st, pos); - return TRUE; - } - - if(lua_type(st, pos)==LUA_TNIL || lua_type(st, pos)==LUA_TNONE){ - if(type=='t' || type=='f'){ + + case LUA_TNIL: + case LUA_TNONE: + if(type=='a'){ + if(valret) + ((ExtlAny*)valret)->type='v'; + }else if(type=='t' || type=='f'){ if(valret) *((int*)valret)=LUA_NOREF; }else if(type=='s' || type=='S'){ @@ -688,10 +697,9 @@ static bool extl_stack_get(lua_State *st, int pos, char type, return FALSE; } return TRUE; - } - if(type=='s' || type=='S'){ - if(lua_type(st, pos)!=LUA_TSTRING) + case LUA_TSTRING: + if(type!='s' && type!='S' && type!='a') return FALSE; if(valret){ str=lua_tostring(st, pos); @@ -700,95 +708,141 @@ static bool extl_stack_get(lua_State *st, int pos, char type, if(str==NULL) return FALSE; } - *((const char**)valret)=str; + if(type=='a'){ + ((ExtlAny*)valret)->type=(copystring ? 's' : 'S'); + ((ExtlAny*)valret)->value.s=str; + }else{ + *((const char**)valret)=str; + } } return TRUE; - } - if(type=='f'){ - if(!lua_isfunction(st, pos)) + case LUA_TFUNCTION: + if(type!='f' && type!='a') return FALSE; if(valret){ lua_pushvalue(st, pos); - *((int*)valret)=lua_ref(st, 1); + if(type=='a'){ + ((ExtlAny*)valret)->type='f'; + ((ExtlAny*)valret)->value.f=lua_ref(st, 1); + }else{ + *((int*)valret)=lua_ref(st, 1); + } } return TRUE; - } - - if(type=='t'){ - if(!lua_istable(st, pos)) + + case LUA_TTABLE: + if(type!='t' && type!='a') return FALSE; if(valret){ lua_pushvalue(st, pos); - *((int*)valret)=lua_ref(st, 1); + if(type=='a'){ + ((ExtlAny*)valret)->type='t'; + ((ExtlAny*)valret)->value.f=lua_ref(st, 1); + }else{ + *((int*)valret)=lua_ref(st, 1); + } } return TRUE; - } - - if(type=='o'){ - bool invalid=FALSE, dead=FALSE; - Obj *obj=extl_get_obj(st, pos, &invalid, &dead); - if(wasdeadobject!=NULL) - *wasdeadobject=dead; - if(valret){ - *((Obj**)valret)=obj; - D(fprintf(stderr, "Got obj %p, ", obj); - fprintf(stderr, "%s\n", OBJ_TYPESTR(obj))); + + case LUA_TUSERDATA: + if(type=='o'|| type=='a'){ + bool invalid=FALSE, dead=FALSE; + Obj *obj=extl_get_obj(st, pos, &invalid, &dead); + if(wasdeadobject!=NULL) + *wasdeadobject=dead; + if(valret){ + if(type=='a'){ + ((ExtlAny*)valret)->type='o'; + ((ExtlAny*)valret)->value.o=obj; + }else{ + *((Obj**)valret)=obj; + } + } + return !invalid; } - return !invalid; } return FALSE; } -static void extl_stack_push(lua_State *st, char spec, void *ptr) +static void extl_to_any(ExtlAny *a, char type, void *ptr) { - if(spec=='i'){ - lua_pushnumber(st, *(int*)ptr); - }else if(spec=='d'){ - lua_pushnumber(st, *(double*)ptr); - }else if(spec=='b'){ - lua_pushboolean(st, *(bool*)ptr); - }else if(spec=='o'){ - extl_push_obj(st, *(Obj**)ptr); - }else if(spec=='s' || spec=='S'){ - lua_pushstring(st, *(char**)ptr); - }else if(spec=='t' || spec=='f'){ - lua_rawgeti(st, LUA_REGISTRYINDEX, *(int*)ptr); - }else{ - lua_pushnil(st); + if(type=='a'){ + *a=*(ExtlAny*)ptr; + return; + } + + a->type=type; + + switch(type){ + case 'i': a->value.i=*(int*)ptr; break; + case 'd': a->value.d=*(double*)ptr; break; + case 'b': a->value.b=*(bool*)ptr; break; + case 'o': a->value.o=*(Obj**)ptr; break; + case 's': + case 'S': a->value.s=*(char**)ptr; break; + case 't': a->value.t=*(ExtlTab*)ptr; break; + case 'f': a->value.f=*(ExtlFn*)ptr; break; } } -static bool extl_stack_push_vararg(lua_State *st, char spec, va_list *argsp) +static void extl_to_any_vararg(ExtlAny *a, char type, va_list *argsp) { - switch(spec){ - case 'i': - lua_pushnumber(st, (double)va_arg(*argsp, int)); - break; - case 'd': - lua_pushnumber(st, va_arg(*argsp, double)); - break; - case 'b': - lua_pushboolean(st, va_arg(*argsp, bool)); - break; - case 'o': - extl_push_obj(st, va_arg(*argsp, Obj*)); - break; - case 'S': - case 's': - lua_pushstring(st, va_arg(*argsp, char*)); - break; - case 'f': - case 't': - lua_rawgeti(st, LUA_REGISTRYINDEX, va_arg(*argsp, int)); - break; - default: - return FALSE; + if(type=='a'){ + *a=va_arg(*argsp, ExtlAny); + return; } + a->type=type; + + switch(type){ + case 'i': a->value.i=va_arg(*argsp, int); break; + case 'd': a->value.d=va_arg(*argsp, double); break; + case 'b': a->value.b=va_arg(*argsp, bool); break; + case 'o': a->value.o=va_arg(*argsp, Obj*); break; + case 's': + case 'S': a->value.s=va_arg(*argsp, char*); break; + case 't': a->value.t=va_arg(*argsp, ExtlTab); break; + case 'f': a->value.f=va_arg(*argsp, ExtlFn); break; + } +} + + +static void extl_stack_pusha(lua_State *st, ExtlAny *a) +{ + switch(a->type){ + case 'i': lua_pushnumber(st, a->value.i); break; + case 'd': lua_pushnumber(st, a->value.d); break; + case 'b': lua_pushboolean(st, a->value.b); break; + case 'o': extl_push_obj(st, a->value.o); break; + case 's': + case 'S': lua_pushstring(st, a->value.s); break; + case 't': lua_rawgeti(st, LUA_REGISTRYINDEX, a->value.t); break; + case 'f': lua_rawgeti(st, LUA_REGISTRYINDEX, a->value.f); break; + default: lua_pushnil(st); + } +} + + +static void extl_stack_push(lua_State *st, char spec, void *ptr) +{ + ExtlAny a; + + extl_to_any(&a, spec, ptr); + extl_stack_pusha(st, &a); +} + + +static bool extl_stack_push_vararg(lua_State *st, char spec, va_list *argsp) +{ + ExtlAny a; + + extl_to_any_vararg(&a, spec, argsp); + extl_stack_pusha(st, &a); + return TRUE; } @@ -802,21 +856,29 @@ static bool extl_stack_push_vararg(lua_State *st, char spec, va_list *argsp) enum{STRINGS_NONE, STRINGS_NONCONST, STRINGS_ALL}; -static void extl_free(void *ptr, char spec, int strings) +static void extl_any_free(ExtlAny *a, int strings) { - if(((spec=='s' && strings!=STRINGS_NONE) || - (spec=='S' && strings==STRINGS_ALL)) && *(char**)ptr!=NULL){ - if(*(char**)ptr!=NULL) - free(*(char**)ptr); - *(char**)ptr=NULL; - }else if(spec=='t'){ - extl_unref_table(*(ExtlTab*)ptr); - }else if(spec=='f'){ - extl_unref_fn(*(ExtlFn*)ptr); + if((a->type=='s' && strings!=STRINGS_NONE) || + (a->type=='S' && strings==STRINGS_ALL)){ + if(a->value.s!=NULL) + free((char*)a->value.s); + }else if(a->type=='t'){ + extl_unref_table(a->value.t); + }else if(a->type=='f'){ + extl_unref_fn(a->value.f); } } +static void extl_free(void *ptr, char spec, int strings) +{ + ExtlAny a; + + extl_to_any(&a, spec, ptr); + extl_any_free(&a, strings); +} + + /*}}}*/ @@ -1019,6 +1081,11 @@ static bool extl_table_do_gets(ExtlTab ref, const char *entry, return extl_table_get(ref, 's', type, entry, valret); } +bool extl_table_gets_a(ExtlTab ref, const char *entry, ExtlAny *ret) +{ + return extl_table_do_gets(ref, entry, 'a', (void*)ret); +} + bool extl_table_gets_o(ExtlTab ref, const char *entry, Obj **ret) { return extl_table_do_gets(ref, entry, 'o', (void*)ret); @@ -1060,6 +1127,11 @@ static bool extl_table_do_geti(ExtlTab ref, int entry, char type, void *valret) return extl_table_get(ref, 'i', type, entry, valret); } +bool extl_table_geti_a(ExtlTab ref, int entry, ExtlAny *ret) +{ + return extl_table_do_geti(ref, entry, 'a', (void*)ret); +} + bool extl_table_geti_o(ExtlTab ref, int entry, Obj **ret) { return extl_table_do_geti(ref, entry, 'o', (void*)ret); @@ -1165,6 +1237,10 @@ bool extl_table_set(ExtlTab ref, char itype, char type, ...) return retval; } +bool extl_table_sets_a(ExtlTab ref, const char *entry, const ExtlAny *val) +{ + return extl_table_set(ref, 's', 'a', entry, val); +} bool extl_table_sets_o(ExtlTab ref, const char *entry, Obj *val) { @@ -1202,6 +1278,11 @@ bool extl_table_sets_t(ExtlTab ref, const char *entry, ExtlTab val) } +bool extl_table_seti_a(ExtlTab ref, int entry, const ExtlAny *val) +{ + return extl_table_set(ref, 'i', 'a', entry, val); +} + bool extl_table_seti_o(ExtlTab ref, int entry, Obj *val) { return extl_table_set(ref, 'i', 'o', entry, val); @@ -1290,6 +1371,58 @@ bool extl_table_cleari(ExtlTab ref, int entry) +/*}}}*/ + + +/*{{{ Table iteration */ + + +typedef struct{ + ExtlTab ref; + ExtlIterFn *fn; + void *d; +} IterP; + + +int extl_table_iter_do(lua_State *st, IterP *par) +{ + lua_rawgeti(st, LUA_REGISTRYINDEX, par->ref); + + lua_pushnil(st); + + while(lua_next(st, -2)!=0){ + ExtlAny k, v; + + if(extl_stack_get(st, -2, 'a', FALSE, NULL, &k)){ + bool ret=TRUE; + if(extl_stack_get(st, -1, 'a', FALSE, NULL, &v)){ + ret=par->fn(k, v, par->d); + extl_any_free(&v, STRINGS_NONE); + } + extl_any_free(&k, STRINGS_NONE); + if(!ret) + return 0; + } + + lua_pop(st, 1); + } + + return 0; +} + + +void extl_table_iter(ExtlTab ref, ExtlIterFn *fn, void *d) +{ + IterP par; + + par.ref=ref; + par.fn=fn; + par.d=d; + + extl_cpcall(l_st, (ExtlCPCallFn*)extl_table_iter_do, &par); +} + + /*}}}*/ diff --git a/libextl/luaextl.h b/libextl/luaextl.h index f31cc97..f016088 100644 --- a/libextl/luaextl.h +++ b/libextl/luaextl.h @@ -28,6 +28,7 @@ * t: table * f: function (c or lua) * v: void + * a: ExtlAny */ typedef int ExtlTab; @@ -43,6 +44,11 @@ typedef union{ ExtlTab t; } ExtlL2Param; +typedef struct{ + char type; + ExtlL2Param value; +} ExtlAny; + typedef bool ExtlL2CallHandler(void (*fn)(), ExtlL2Param *in, ExtlL2Param *out); @@ -88,6 +94,7 @@ extern bool extl_table_get_vararg(ExtlTab ref, char itype, char type, va_list *args); extern bool extl_table_get(ExtlTab ref, char itype, char type, ...); +extern bool extl_table_gets_a(ExtlTab ref, const char *entry, ExtlAny *ret); extern bool extl_table_gets_o(ExtlTab ref, const char *entry, Obj **ret); extern bool extl_table_gets_i(ExtlTab ref, const char *entry, int *ret); extern bool extl_table_gets_d(ExtlTab ref, const char *entry, double *ret); @@ -97,6 +104,7 @@ extern bool extl_table_gets_f(ExtlTab ref, const char *entry, ExtlFn *ret); extern bool extl_table_gets_t(ExtlTab ref, const char *entry, ExtlTab *ret); extern int extl_table_get_n(ExtlTab ref); +extern bool extl_table_geti_a(ExtlTab ref, int entry, ExtlAny *ret); extern bool extl_table_geti_o(ExtlTab ref, int entry, Obj **ret); extern bool extl_table_geti_i(ExtlTab ref, int entry, int *ret); extern bool extl_table_geti_d(ExtlTab ref, int entry, double *ret); @@ -110,6 +118,7 @@ extern bool extl_table_set_vararg(ExtlTab ref, char itype, char type, va_list *args); extern bool extl_table_set(ExtlTab ref, char itype, char type, ...); +extern bool extl_table_sets_a(ExtlTab ref, const char *entry, const ExtlAny *ret); extern bool extl_table_sets_o(ExtlTab ref, const char *entry, Obj *val); extern bool extl_table_sets_i(ExtlTab ref, const char *entry, int val); extern bool extl_table_sets_d(ExtlTab ref, const char *entry, double val); @@ -118,6 +127,7 @@ extern bool extl_table_sets_s(ExtlTab ref, const char *entry, const char *val); extern bool extl_table_sets_f(ExtlTab ref, const char *entry, ExtlFn val); extern bool extl_table_sets_t(ExtlTab ref, const char *entry, ExtlTab val); +extern bool extl_table_seti_a(ExtlTab ref, int entry, const ExtlAny *ret); extern bool extl_table_seti_o(ExtlTab ref, int entry, Obj *val); extern bool extl_table_seti_i(ExtlTab ref, int entry, int val); extern bool extl_table_seti_d(ExtlTab ref, int entry, double val); @@ -134,6 +144,12 @@ extern bool extl_table_clear(ExtlTab ref, char itype, ...); extern bool extl_table_clears(ExtlTab ref, const char *entry); extern bool extl_table_cleari(ExtlTab ref, int entry); +/* Table/iterate */ + +typedef bool ExtlIterFn(ExtlAny k, ExtlAny v, void *d); + +extern void extl_table_iter(ExtlTab ref, ExtlIterFn *fn, void *d); + /* Call */ extern void extl_protect(ExtlSafelist *sl); diff --git a/libmainloop/defer.c b/libmainloop/defer.c index c8d5616..3153955 100644 --- a/libmainloop/defer.c +++ b/libmainloop/defer.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ /* This file contains routines for deferred execution of potentially @@ -117,7 +114,8 @@ bool mainloop_defer_action_on_list(Obj *obj, WDeferredAction *action, d->action=action; d->list=list; d->fn=extl_fn_none(); - + watch_init(&(d->watch)); + if(obj!=NULL) watch_setup(&(d->watch), obj, defer_watch_handler); @@ -156,7 +154,6 @@ bool mainloop_defer_extl_on_list(ExtlFn fn, WDeferred **list) d->action=NULL; d->list=list; d->fn=extl_ref_fn(fn); - watch_init(&(d->watch)); LINK_ITEM(*list, d, next, prev); @@ -186,8 +183,11 @@ static void do_execute(WDeferred *d) free_defer(d); if(a!=NULL){ - if(obj!=NULL) - a(obj); + /* The deferral should not be on the list, if there + * was an object, and it got destroyed. + */ + /*if(obj!=NULL)*/ + a(obj); }else if(fn!=extl_fn_none()){ extl_call(fn, NULL, NULL); extl_unref_fn(fn); diff --git a/libmainloop/defer.h b/libmainloop/defer.h index ee7d400..90f77a2 100644 --- a/libmainloop/defer.h +++ b/libmainloop/defer.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_LIBMAINLOOP_DEFER_H diff --git a/libmainloop/exec.c b/libmainloop/exec.c index 6038e36..fd6ef6b 100644 --- a/libmainloop/exec.c +++ b/libmainloop/exec.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/libmainloop/exec.h b/libmainloop/exec.h index 796e453..d9a87e7 100644 --- a/libmainloop/exec.h +++ b/libmainloop/exec.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_LIBMAINLOOP_EXEC_H diff --git a/libmainloop/hooks.c b/libmainloop/hooks.c index 9b873a5..d2d2127 100644 --- a/libmainloop/hooks.c +++ b/libmainloop/hooks.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/libmainloop/hooks.h b/libmainloop/hooks.h index 11487de..b9b3318 100644 --- a/libmainloop/hooks.h +++ b/libmainloop/hooks.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_LIBMAINLOOP_HOOKS_H diff --git a/libmainloop/rx.mk b/libmainloop/rx.mk index ba54cc9..ff6cc20 100644 --- a/libmainloop/rx.mk +++ b/libmainloop/rx.mk @@ -8,4 +8,5 @@ MAINLOOP_SOURCES_ = select.c defer.c signal.c hooks.c exec.c MAINLOOP_SOURCES = $(patsubst %,$(MAINLOOP_DIR)/%, $(MAINLOOP_SOURCES_)) +MKEXPORTS_EXTRA_DEPS += $(MAINLOOP_SOURCES) MKEXPORTS_EXTRAS += -reexport mainloop $(MAINLOOP_SOURCES) diff --git a/libmainloop/select.c b/libmainloop/select.c index 2876222..e66d35c 100644 --- a/libmainloop/select.c +++ b/libmainloop/select.c @@ -3,10 +3,7 @@ * * Partly based on a contributed code. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/libmainloop/select.h b/libmainloop/select.h index 465f134..91204cc 100644 --- a/libmainloop/select.h +++ b/libmainloop/select.h @@ -3,10 +3,7 @@ * * Based on a contributed readfds code. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_LIBMAINLOOP_SELECT_H diff --git a/libmainloop/signal.c b/libmainloop/signal.c index fea01ba..e87e154 100644 --- a/libmainloop/signal.c +++ b/libmainloop/signal.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/libmainloop/signal.h b/libmainloop/signal.h index 7e8682e..b05e20e 100644 --- a/libmainloop/signal.h +++ b/libmainloop/signal.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_LIBMAINLOOP_SIGNAL_H diff --git a/libtu/exact-version b/libtu/exact-version index 694c1e0..e850700 100644 --- a/libtu/exact-version +++ b/libtu/exact-version @@ -1,6 +1,12 @@ Context: +[Some list code improvements +Tuomo Valkonen **20070506140559] + +[Oops, fixed comparison function order. +Tuomo Valkonen **20070424170047] + [Renamed `prog_execname` `libtu_progname` and added `libtu_progbasename`. Tuomo Valkonen **20070310230536] diff --git a/libtu/objlist.c b/libtu/objlist.c index 643f3fa..9d5062f 100644 --- a/libtu/objlist.c +++ b/libtu/objlist.c @@ -136,6 +136,12 @@ static ObjList *objlist_find_node(ObjList *objlist, Obj *obj) } +bool objlist_contains(ObjList *objlist, Obj *obj) +{ + return (objlist_find_node(objlist, obj)!=NULL); +} + + bool objlist_insert_last(ObjList **objlist, Obj *obj) { ObjList *node=reuse(objlist); @@ -177,7 +183,7 @@ bool objlist_reinsert_last(ObjList **objlist, Obj *obj) node=objlist_find_node(*objlist, obj); if(node==NULL) - return FALSE; + return objlist_insert_last(objlist, obj); UNLINK_ITEM(*objlist, node, next, prev); LINK_ITEM_LAST(*objlist, node, next, prev); @@ -195,7 +201,7 @@ bool objlist_reinsert_first(ObjList **objlist, Obj *obj) node=objlist_find_node(*objlist, obj); if(node==NULL) - return FALSE; + return objlist_insert_first(objlist, obj); UNLINK_ITEM(*objlist, node, next, prev); LINK_ITEM_FIRST(*objlist, node, next, prev); diff --git a/libtu/objlist.h b/libtu/objlist.h index 678706f..62533cb 100644 --- a/libtu/objlist.h +++ b/libtu/objlist.h @@ -48,6 +48,7 @@ extern bool objlist_insert_first(ObjList **objlist, Obj *obj); extern bool objlist_reinsert_last(ObjList **objlist, Obj *obj); extern bool objlist_reinsert_first(ObjList **objlist, Obj *obj); extern bool objlist_remove(ObjList **objlist, Obj *obj); +extern bool objlist_contains(ObjList *objlist, Obj *obj); extern void objlist_clear(ObjList **objlist); extern void objlist_iter_init(ObjListIterTmp *state, ObjList *objlist); extern Obj *objlist_iter(ObjListIterTmp *state); diff --git a/libtu/ptrlist.c b/libtu/ptrlist.c index 1ea6726..f86d9a4 100644 --- a/libtu/ptrlist.c +++ b/libtu/ptrlist.c @@ -53,6 +53,12 @@ static PtrList *ptrlist_find_node(PtrList *ptrlist, void *ptr) } +bool ptrlist_contains(PtrList *ptrlist, void *ptr) +{ + return (ptrlist_find_node(ptrlist, ptr)!=NULL); +} + + bool ptrlist_insert_last(PtrList **ptrlist, void *ptr) { PtrList *node=mknode(ptr); @@ -84,7 +90,7 @@ bool ptrlist_reinsert_last(PtrList **ptrlist, void *ptr) PtrList *node=ptrlist_find_node(*ptrlist, ptr); if(node==NULL) - return FALSE; + return ptrlist_insert_last(ptrlist, ptr); UNLINK_ITEM(*ptrlist, node, next, prev); LINK_ITEM_LAST(*ptrlist, node, next, prev); @@ -98,7 +104,7 @@ bool ptrlist_reinsert_first(PtrList **ptrlist, void *ptr) PtrList *node=ptrlist_find_node(*ptrlist, ptr); if(node==NULL) - return FALSE; + return ptrlist_insert_first(ptrlist, ptr); UNLINK_ITEM(*ptrlist, node, next, prev); LINK_ITEM_FIRST(*ptrlist, node, next, prev); diff --git a/libtu/ptrlist.h b/libtu/ptrlist.h index cadec02..70da547 100644 --- a/libtu/ptrlist.h +++ b/libtu/ptrlist.h @@ -46,6 +46,7 @@ extern bool ptrlist_insert_first(PtrList **ptrlist, void *ptr); extern bool ptrlist_reinsert_last(PtrList **ptrlist, void *ptr); extern bool ptrlist_reinsert_first(PtrList **ptrlist, void *ptr); extern bool ptrlist_remove(PtrList **ptrlist, void *ptr); +extern bool ptrlist_contains(PtrList *ptrlist, void *ptr); extern void ptrlist_clear(PtrList **ptrlist); extern void ptrlist_iter_init(PtrListIterTmp *state, PtrList *ptrlist); extern void *ptrlist_iter(PtrListIterTmp *state); diff --git a/libtu/stringstore.c b/libtu/stringstore.c index e47c902..3c5b7a1 100644 --- a/libtu/stringstore.c +++ b/libtu/stringstore.c @@ -40,7 +40,7 @@ static int cmp(const void *d_, const char *nodekey) return (res!=0 ? res - : (nodekey[d->len]=='\0' ? 0 : 1)); + : (nodekey[d->len]=='\0' ? 0 : -1)); } diff --git a/man/Makefile b/man/Makefile index c35c5a9..ed81982 100644 --- a/man/Makefile +++ b/man/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/build/system-inc.mk ###################################### -TRANSLATIONS=fi cs de +TRANSLATIONS=fi cs WELCOME_TARGETS=\ welcome.txt \ @@ -31,7 +31,8 @@ CONFIGS=../etc/cfg_ioncore.lua \ # TODO: PWM configuration file is undocumented PWM_CONFIGS=\ ../etc/cfg_ioncore.lua \ - ../etc/cfg_menu.lua + ../etc/cfg_menu.lua \ + ../pwm/cfg_pwm.lua ###################################### diff --git a/man/ion3.cs.in b/man/ion3.cs.in index 81efb95..4d9044f 100644 --- a/man/ion3.cs.in +++ b/man/ion3.cs.in @@ -7,7 +7,7 @@ Ion - spr .SH "POPIS" Ion je dla¾dicový správce oken se zálo¾kami navr¾ený pro klávesnicové u¾ivatele. - + .SH "VOLBY" .TP .B \-display poèítaè:displej.obrazovka @@ -35,12 +35,12 @@ Zobraz Zobrazí verzi .TP .B \-about -Zobrazí informace o programu (verze, copyright) +Zobrazí informace o programu (verze, autor, copyright) .SH Základní pojetí Tato sekce pøiná¹í pøehled typù objektù, které se objevují na X displeji -spravovaném Ionem. To je nezbytné pro pochopení operací s objekty a pro +spravovaném Ionem. To je nezbytné pro pochopení operací s objekty a pro pochopení, proè jsou rùzná klávesová pøiøazení dostupná jen u nìkterých objektù. Podrobnìj¹í popis nutný pro psaní vlastních pøizpùsobení naleznete na webových stránkách Ionu. @@ -79,19 +79,19 @@ definuje toto p BINDINGS:WScreen -.SS Pøiøazení pro práci s nejvy¹¹ími rámy a obrazovkami a jejich potomky - -BINDINGS:WMPlex.toplevel - -.SS Pøiøazení pro práci s rámy a obrazovkami a jejich potomky +.SS Pøiøazení pro práci s rámy a obrazovkami BINDINGS:WMPlex -.SS Pøiøazení pro práci se v¹emi rámy (vèetnì doèasných) a jejich potomky +.SS Pøiøazení pro práci se v¹emi rámy BINDINGS:WFrame -.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými) a jejich potomky +.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými) a obrazovkami + +BINDINGS:WMPlex.toplevel + +.SS Pøiøazení pro práci s nejvy¹¹ími rámy (ne s doèasnými) BINDINGS:WFrame.toplevel @@ -104,11 +104,10 @@ BINDINGS:WFrame.floating BINDINGS:WTiling .\" BINDINGS:WFrame.tiled -.SS Pøiøazení pro kientská okna +.SS Pøiøazení pro klientská okna BINDINGS:WClientWin - -BINDINGS:WGroupWS +BINDINGS:WGroupCW .SS Pøiøazení pro pøesun/zmìnu velikosti diff --git a/man/ion3.de.in b/man/ion3.de.in deleted file mode 100644 index fa60e7b..0000000 --- a/man/ion3.de.in +++ /dev/null @@ -1,160 +0,0 @@ -.TH ION 1 -.SH NAME -Ion - ein X11 Fenster Manager -.SH ÜBERSICHT -.B ion3 -.I "[optionen]" -.SH "BESCHREIBUNG" - -Ion ist ein tabellarisch aufgebauter Fenster Manager, entwickelt für -Benutzer welche auf die Tastatur spezialisiert sind. - -.SH "OPTIONEN" -.TP -.B \-display host:display.screen -X Anzeige zum darstellen -.TP -.B \-conffile Konfigurationsdatei -Konfigurationsdatei welche anstelle der Vorgegebenen benutzt werden soll -.TP -.B \-searchdir Verzeichnis -Verzeichnis worin die Konfigurationsdateien und andere Scripte gesucht werden -.TP -.B \-oneroot -Auf X Servern mit mehreren (traditionell non-Xinerama) Screens; handhabt nur den -voreingestellten Screen (Wurzelfenster); nicht alle, welche durch die '-display' -Option oder in der DISPLAY Umgebungsvariable bereitgestellt werden -.TP -.B \-session sitzungs_name -Setzt einen Sitzungsnamen. Diese Option beeinflusst wo der Arbeitsbereich und -andere Sicherungsdateien abgelegt werden (~/.ion3/sitzungs_name wenn die Option -gesetzt wurde). -.TP -.B \-help -Zeigt die Hilfe für die Kommandozeilenoptionen -.TP -.B \-version -Zeigt die Version -.TP -.B \-about -Zeigt Informationen über den Autor, die Version und das Copyright - -.SH BASIS KONZEPTE - -Diese Kapitel ist ein Überblick über die Objekttypen welche auf der X Anzeige -durch Ion behandelt werden. Die Beziehungen sind auf die Standardeinstellungen -ausgerichtet. Diese Informationen hier sind nötig um die Operationen und -Möglichkeiten der unterschiedlichen Tastenkombinationen zu verstehen. Siehe -dazu auch die weiteren Erklärungen unten. Für detailliertere Erklärungen, -welche zum schreiben eigener Konfigurationsdateien benötigt werden, siehe die -zusätzlichen Dokumentationen auf der Ion Webseite - -Die obersten Objekte welche benutzt werden können sind \fBScreens\fP. -Sie sind mit physikalischen Sceeens zu vergleichen. Screens enthalten -\fBArbeitsbereiche\fP und \fBClient Fenster\fP gepackt in einem Vollbildmodus. -Diese Objekte sind \fBgebündelt\fP, mit dem Hintergrund, dass nur einer auf -einmal angezeigt werden kann. - -Derzeit unterstützt Ion zwei Arten von Arbeitsbereichen; \fBgeteilt\fP in den -traditionellen Ion-Style und den herkömlichen \fBfliessenden\fP Arbeitsbereich -des PWM. Arbeitsbereiche sind keine sichtbaren Objekte sondern eher eine -Sammlung von gleichzeitig erkennbaren \fBFrames\fP. - -Ähnlich wie Screens, bündeln Frames andere Objekte, in diesem Fall sind dies -meist Client Fenster. Die meiste Zeit, sind Frames das einzige von Ion was auf -dem Screen zu sehen ist. Frames können Rahmen haben und sie haben einen -\fBReiter\fP für jedes in ihnen gebündelte Objekt. - -\fBAnfragen\fP sind Textboxen die am unteren Rand eines Frames oder Screens -erscheinen. Sie können nach Texteingaben zum ausführen einer Aktion verlangen. -Diese sind abhängig von den an sie gebundenen Aktionen. Die meisten Anfragen -unterstützen Autovervollständigung. - -.SH BINDUNGEN - -Hier sind die voreingestellten Tasten- und Mauszeigerbindungen beschrieben. -(\fBMod1\fP) hängt vom jeweiligen verwendeten System ab. Auf PC's mit XFree86 -ist es höchstwahrscheinlich an die linke 'ALT-Taste' gebungen (\fBALT_L\fP). -Auf SUN Systemen ist es sicherlich an die 'Diamant' Tasten gebunden -(\fBMETA_L\fP, \fBMETA_R\fP). Benutze \fIxmodmap(1x)\fP um die Belegung -herauszufinden. - -Die Zeichenkette in den eckigen Klammern nach einer Bindungsgruppe (wird unten -gezeigt) deutet auf die Konfigurationsdatei des Modules in welchem die Bindungen -definiert sind. - -.SS Global verfügbare Bindungen - -BINDINGS:WScreen - -.".SS Bindungsoperationen auf Frames und Screens und ihren Kindern - -BINDINGS:WMPlex - -.SS Bindungsoperationen auf Frames und ihren Kindern - -BINDINGS:WFrame - -.SS Bindungen zum Bewegungs-/Veränderungsmodus - -BINDINGS:WMoveresMode - -.SS Bindungen zum teilen der Arbeitsfläche [mod_ionws] - -BINDINGS:WTiling -.\" BINDINGS:WFrame.tiled - -.SS Bindungen für den fliessenden Arbeitsbereich und Frames [mod_floatws] - -BINDINGS:WGroupWS - -BINDINGS:WFrame.floating - -.SS Bindungen für Message- und Anfrageboxen [mod_query] - -BINDINGS:WInput - -.SS Bindungen zum Editieren in Anfragen [mod_query] - -Diese Bindungen sind vergleichbar mit denen des \fIjoe(1)\fP Texteditors. -Auschneiden, Kopieren und Einfügen arbeiten nach konventionellen -Gesichtspunkten. Etwas überarbeitet aber die gleichen Tasten. - -BINDINGS:WEdln - -.SS Bindungen für die Menüs [mod_menu] - -BINDINGS:WMenu - - -.SH DATEIEN und VERZEICHNISSE -.TP -.B ETCDIR/cfg_ion.lua -Voreingestellte Hauptkonfigurationsdateien -.TP -.B ETCDIR/cfg_*.lua -Andere Konfigurationsdateien -.TP -.B ETCDIR/look_*.lua -Farbschemata Konfigurationsdateien -.TP -.B ~/.ion3/ -Benutzerkonfigurationsdateien -.TP -.B ~/.ion3/cfg_ion.lua -Voreingestellte Benutzer Hauptkonfigurationsdateien (überschreiben die -systemweiten Konfigurationen) - -.SH SIEHE AUCH -Die Ion Homepage, \fIhttp://iki.fi/tuomov/ion/\fP -.PP -Das Dokument "Ion: Configuring and extending with Lua" kann auf der Ion Webseite -gefunden werden. - -.PP -.I DOCDIR/ -.PP -\fIX(7x)\fP, \fIpwm3(1)\fP, \fIjoe(1)\fP - -.SH AUTOR -Ion wurde von Tuomo Valkonen geschrieben diff --git a/man/ion3.fi.in b/man/ion3.fi.in index 82fca51..896a4d5 100644 --- a/man/ion3.fi.in +++ b/man/ion3.fi.in @@ -35,11 +35,11 @@ N Näytä Ionin versio. .TP .B \-about -Näytä tietoja Ionista (versio, tekijänoikeudet). +Näytä tietoja Ionista (versio, tekijä, lisenssi). .SH PERUSKÄSITTEET -Tämä kappale on katsaus erilaisiin niin kutsuttuihin \fBolioihin\fP, +Tämä kappale on katsaus erilaisiin niin kutsuttuihin \fBkappaleisiin\fP, joita ilmenee Ionin hallitsemalla X-näytöllä, ja niiden suhteisiin tavallisessa kokoonpanossa. Sinun tarvitse ymmärtää nämä suhteet tietääksesi milloin mitkäkin alempana kuvattavat näppäinsidonnat @@ -47,20 +47,20 @@ ovat k tehdäksesi omat asetustiedostot, katso Ionin seittisivulta saatavaa yksityiskohtaisempaa dokumentaatiota. -Ylimmän tason olioita, joilla on merkitystä tässä yhteydessä, +Ylimmän tason kappaleista, joilla on merkitystä tässä yhteydessä, kutsutaan \fBnäytöiksi\fP. Ne vastaavat fyysisiä näyttöjä. Näytöt sisältävät \fBtyöpöytiä\fP (jotka ovat itse eräänlaisia \fBryhmiä\fP) -ja kokoruudun tilassa olevia \fBasiakasikkunoita\fP. Nämä oliot ovat +ja kokoruudun tilassa olevia \fBasiakasikkunoita\fP. Nämä kappaleet ovat \fBlomitettu\fP siten, että vain yksi voi näkyä kerrallaan. Työpöydät voivat vuorostaan sisältää \fBlaatoituksia\fP sekä kelluvia/irroitettuja \fBkehyksiä\fP. Laatoitukset taasen sisältävät \fBkehyksiä\fP laatoitettuna täyttämään koko näytön, sekä mahdollisesti tilapalkin tai telakan (dock). Näyttöjen tapaan kehykset lomittavat -muita olioita, mutta tässä tapauksessa lähinnä asiakasikkuna\fBryhmiä\fP. +muita kappaleita, mutta tässä tapauksessa lähinnä asiakasikkuna\fBryhmiä\fP. Kehykset ovat suurimman osan ajasta ainut asia, minkä näet Ionista. Niillä voi olla reunakoristukset, ja lisäksi kehyksissä on \fBvälilehti\fP -jokaiselle lomitetulle oliolle. +jokaiselle lomitetulle kappaleelle. \fBKyselyt\fP ovat näyttöjen tai kehysten alaosiin imestyviä laatikoita, jotka odottavat sinulta tekstin syöttöä jonkin siitä riippuvan toiminnon @@ -82,11 +82,7 @@ jonka asetustiedosto m BINDINGS:WScreen -.SS Näytöillä tai ylimmän tason kehyksissä toimivat sidonnat - -BINDINGS:WMPlex.toplevel - -.SS Näytöillä tai (kaikissa) kehyksissä toimivat sidonnat +.SS Näytöillä ja kaikissa kehyksissä toimivat sidonnat BINDINGS:WMPlex @@ -94,7 +90,11 @@ BINDINGS:WMPlex BINDINGS:WFrame -.SS Ylimmän tason kehyksissä (ei ns. transient-dialogi) toimivat sidonnat +.SS Näytöillä ja ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat + +BINDINGS:WMPlex.toplevel + +.SS Ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat BINDINGS:WFrame.toplevel @@ -110,7 +110,6 @@ BINDINGS:WTiling .SS Asiakasikkunoiden sidonnat BINDINGS:WClientWin - BINDINGS:WGroupCW .SS Siirto- ja koonmuutostilan sidonnat diff --git a/man/ion3.in b/man/ion3.in index b9ab3f1..304498d 100644 --- a/man/ion3.in +++ b/man/ion3.in @@ -35,7 +35,7 @@ Show help on command line options Show version .TP .B \-about -Show about text (version, copyright) +Show about text (version, author, license) .SH BASIC CONCEPTS @@ -79,19 +79,19 @@ the module that whose configuration file defines these bindings. BINDINGS:WScreen -.SS Bindings operating on top-level frames and screens and their children - -BINDINGS:WMPlex.toplevel - -.SS Bindings operating on frames and screens and their children +.SS Bindings operating on all frames and screens BINDINGS:WMPlex -.SS Bindings operating on all frames (including transient) and their children +.SS Bindings operating on all frames BINDINGS:WFrame -.SS Bindings operating on top-level (non-transient) frames and their children +.SS Bindings operating on top-level (non-transient) frames and screens + +BINDINGS:WMPlex.toplevel + +.SS Bindings operating on top-level (non-transient) frames BINDINGS:WFrame.toplevel @@ -107,7 +107,6 @@ BINDINGS:WTiling .SS Bindings for client windows BINDINGS:WClientWin - BINDINGS:WGroupCW .SS Move/resize mode bindings diff --git a/man/pwm3.cs.in b/man/pwm3.cs.in index 548a16f..5b6f443 100644 --- a/man/pwm3.cs.in +++ b/man/pwm3.cs.in @@ -37,15 +37,15 @@ Zobraz Zobrazí verzi .TP .B \-about -Zobrazí informace o programu (verze, copyright) +Zobrazí informace o programu (verze, autor, copyright) .SH PØIØAZENÍ -Toto jsou implicitní pøiøazení klávesových zkratek. Pøiøazení modifikátoru +Toto jsou výchozí pøiøazení klávesových zkratek. Pøiøazení modifikátoru (\fBMod1\fP) závisí na systému. Na PCèkách s XFree86 bude nejspí¹ navázán na levou klávesu Alt (\fBAlt_L\fP). Na Sunech je obvykle namapován na klávesy s diamanty (\fBMeta_L\fP, \fBMeta_R\fP). Konkrétní pøiøazení zjistíte -programem \fIxmodmap(1x)\fP. +programem \fIxmodmap(1)\fP. Øetìzec v hranatých závorkách urèuje modul, jeho¾ konfiguraèní soubor definuje toto pøiøazení. @@ -54,23 +54,31 @@ definuje toto p BINDINGS:WScreen -.".SS Pøiøazení pro práci s rámy, obrazovkami a jejich potomky +.SS Pøiøazení pro práci s rámy, obrazovkami a jejich potomky BINDINGS:WMPlex .SS Pøiøazení pro práci s rámy a jejich potomky BINDINGS:WFrame +BINDINGS:WFrame.floating -.SS Pøiøazení pro pøesun/zmìnu velikosti +.SS Pøiøazení pro práci s nejvy¹¹ími (ne s doèasnými) rámy a obrazovkami -BINDINGS:WMoveresMode +BINDINGS:WMPlex.toplevel -.SS Pøiøazení pro plovoucí pracovní plochy [mod_floatws] +.SS Pøiøazení pro práci s nejvy¹¹ími (ne s doèasnými) rámy -BINDINGS:WGroupWS +BINDINGS:WFrame.toplevel -BINDINGS:WFrame.floating +.SS Pøiøazení pro práci s klientskými okny + +BINDINGS:WClientWin +BINDINGS:WGroupCW + +.SS Pøiøazení pro pøesun/zmìnu velikosti + +BINDINGS:WMoveresMode .SS Pøiøazení pro menu [mod_menu] diff --git a/man/pwm3.de.in b/man/pwm3.de.in deleted file mode 100644 index 5f6138d..0000000 --- a/man/pwm3.de.in +++ /dev/null @@ -1,106 +0,0 @@ -.TH PWM 1 -.SH NAME -PWM - ein X11 Fenster Manager -.SH ÜBERSICHT -.B pwm3 -.I "[optionen]" -.SH "BESCHREIBUNG" - -Der originale PWM war der erste Fenster Manager, welcher einen tabellenartigen -Aufbau seiner Objekte unterstützte. Diese Version des PWM basiert auf dem -Quellcode von Ion und unterscheidet sich zu diesem nur durch Unterschiede in den -Konfigurationsdateien, den Pfaden und einigen wenigen zusätzliche Optionen. - -.SH "OPTIONEN" -.TP -.B \-display host:display.screen -X Anzeige zum darstellen -.TP -.B \-conffile Konfigurationsdatei -Konfigurationsdatei welche anstelle der Vorgegebenen benutzt werden soll -.TP -.B \-searchdir dir -Verzeichnis worin die Konfigurationsdateien und andere Scripte gesucht werden -.TP -.B \-oneroot -Auf X Servern mit mehreren (traditionell non-Xinerama) Screens; handhabt nur den -voreingestellten Screen (Wurzelfenster); nicht alle, welche durch die '-display' -Option oder in der DISPLAY Umgebungsvariable bereitgestellt werden -.TP -.B \-sessionname sitzungs_name -Setzt einen Sitzungsnamen. Diese Option beeinflusst wo der Arbeitsbereich und -andere Sicherungsdateien abgelegt werden (~/.pwm3/sitzungs_name wenn die Option -gesetzt wurde). -.TP -.B \-help -Zeigt die Hilfe für die Kommandozeilenoptionen -.TP -.B \-version -Zeigt die Version -.TP -.B \-about -Zeigt Informationen über den Autor, die Version und das Copyright - -.SH BINDUNGEN -Hier sind die voreingestellten Tasten- und Mauszeigerbindungen beschrieben. -(\fBMod1\fP) hängt vom jeweiligen verwendeten System ab. Auf PC's mit XFree86 -ist es höchstwahrscheinlich an die linke 'ALT-Taste' gebungen (\fBALT_L\fP). -Auf SUN Systemen ist es sicherlich an die 'Diamant' Tasten gebunden -(\fBMETA_L\fP, \fBMETA_R\fP). Benutze \fIxmodmap(1x)\fP um die Belegung -herauszufinden. - -Die Zeichenkette in den eckigen Klammern nach einer Bindungsgruppe (wird unten -gezeigt) deutet auf die Konfigurationsdatei des Modules in welchem die Bindungen -definiert sind. - -.SS Global verfügbare Bindungen - -BINDINGS:WScreen - -.".SS Bindungsoperationen auf Frames und Screens und ihren Kindern - -BINDINGS:WMPlex - -.SS Bindungsoperationen auf Frames und ihren Kindern - -BINDINGS:WFrame - -.SS Bindungen zum Bewegungs-/Veränderungsmodus - -BINDINGS:WMoveresMode - -.SS Bindungen für den fliessenden Arbeitsbereich und Frames [mod_floatws] - -BINDINGS:WGroupWS - -BINDINGS:WFrame.floating - -.SS Bindungen für die Menüs [mod_menu] - -BINDINGS:WMenu - - -.SH DATEIEN und VERZEICHNISSE -.TP -.B ETCDIR/cfg_pwm.lua -Voreingestellte Hauptkonfigurationsdateien -.TP -.B ETCDIR/cfg_*.lua -Andere Konfigurationsdateien -.TP -.B ETCDIR/look_*.lua -Farbschemata Konfigurationsdateien -.TP -.B ~/.pwm3/ -Benutzerkonfigurationsdateien -.TP -.B ~/.pwm3/cfg_pwm.lua -Voreingestellte Benutzer Hauptkonfigurationsdateien (überschreiben die -systemweiten Konfigurationen) - -.SH SIEHE AUCH - -Weitere Informationen siehe \fIion3(1)\fP. - -.SH AUTOR -PWM und Ion wurde von Tuomo Valkonen geschrieben diff --git a/man/pwm3.fi.in b/man/pwm3.fi.in index 40c140f..b8d6465 100644 --- a/man/pwm3.fi.in +++ b/man/pwm3.fi.in @@ -36,7 +36,7 @@ N Näytä Ionin versio. .TP .B \-about -Näytä tietoja PWM:sta (versio, tekijänoikeudet). +Näytä tietoja PWM:sta (versio, tekijä, lisenssi). .SH SIDONNAT @@ -53,23 +53,31 @@ jonka asetustiedosto m BINDINGS:WScreen -.\".SS Kehyksiä ja näyttöjä, sekä niiden lapsia käsittelevät sidonnat +.SS Näytöillä ja kaikissa kehyksissä toimivat sidonnat BINDINGS:WMPlex -.SS Kehyksiä, sekä niiden lapsia käsittelevät sidonnat +.SS Kaikissa kehyksissä toimivat sidonnat BINDINGS:WFrame +BINDINGS:WFrame.floating -.SS Siirto ja koonmuutostilan sidonnat +.SS Näytöillä ja ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat -BINDINGS:WMoveresMode +BINDINGS:WMPlex.toplevel -.SS Kelluvien työpöytien ja kehyksien sidonnat [mod_floatws] +.SS Ylimmän tason kehyksissä (ei ns. transientit) toimivat sidonnat -BINDINGS:WGroupWS +BINDINGS:WFrame.toplevel -BINDINGS:WFrame.floating +.SS Asiakasikkunoiden sidonnat + +BINDINGS:WClientWin +BINDINGS:WGroupCW + +.SS Siirto- ja koonmuutostilan sidonnat + +BINDINGS:WMoveresMode .SS Valikoiden sidonnat [mod_menu] diff --git a/man/pwm3.in b/man/pwm3.in index e38625b..8ea21b9 100644 --- a/man/pwm3.in +++ b/man/pwm3.in @@ -38,7 +38,7 @@ Show help on command line options Show version .TP .B \-about -Show about text (version, copyright) +Show about text (version, author, license) .SH BINDINGS @@ -54,23 +54,31 @@ the module that whose configuration file defines these bindings. BINDINGS:WScreen -.".SS Bindings operating on both frames and screens and their children +.SS Bindings operating on all frames and screens and their children BINDINGS:WMPlex -.SS Bindings operating on frames and their children +.SS Bindings operating on all frames and their children BINDINGS:WFrame +BINDINGS:WFrame.floating -.SS Move/resize mode bindings +.SS Bindings operating on top-level (non-transient) frames as well as screens -BINDINGS:WMoveresMode +BINDINGS:WMPlex.toplevel -.SS Bindings for floating workspaces and frames [mod_floatws] +.SS Bindings operating on top-level (non-transient) frames -BINDINGS:WGroupWS +BINDINGS:WFrame.toplevel -BINDINGS:WFrame.floating +.SS Bindings for client windows + +BINDINGS:WClientWin +BINDINGS:WGroupCW + +.SS Move/resize mode bindings + +BINDINGS:WMoveresMode .SS Bindings for menus [mod_menu] diff --git a/man/welcome.de.head b/man/welcome.de.head deleted file mode 100644 index 519e364..0000000 --- a/man/welcome.de.head +++ /dev/null @@ -1,22 +0,0 @@ -Willkommen bei Ion! - -Wenn Sie nie zuvor Ion benutzt haben, empfehlen wir Ihnen unbedingt das -Ion Handbuch zu studieren, bevor Sie weiter fortfahren. Obwohl es -unten aufgeführt ist, können Sie später wieder darauf zurückgreifen, indem -Sie drücken und dann , 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 - Taste ein Terminal -gestartet werden kann, und dass man auf das Hauptmenü mit 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. diff --git a/mod_dock/dock.c b/mod_dock/dock.c index ca41852..dabe075 100644 --- a/mod_dock/dock.c +++ b/mod_dock/dock.c @@ -1437,9 +1437,9 @@ static WPHolder *dock_managed_get_pholder(WDock *dock, WRegion *mgd) static WPHolder *dock_prepare_manage(WDock *dock, const WClientWin *cwin, const WManageParams *param UNUSED, - int redir) + int priority) { - if(redir==MANAGE_REDIR_STRICT_YES) + if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_LOW)) return NULL; return (WPHolder*)create_basicpholder((WRegion*)dock, @@ -1583,7 +1583,7 @@ static bool clientwin_do_manage_hook(WClientWin *cwin, const WManageParams *para } return region_manage_clientwin((WRegion*)dock, cwin, param, - MANAGE_REDIR_PREFER_NO); + MANAGE_PRIORITY_NONE); } diff --git a/mod_menu/grabmenu.c b/mod_menu/grabmenu.c index 05e801f..9192a95 100644 --- a/mod_menu/grabmenu.c +++ b/mod_menu/grabmenu.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -17,6 +14,7 @@ #include #include #include +#include #include "menu.h" #include "mkmenu.h" @@ -93,9 +91,11 @@ WMenu *mod_menu_do_grabmenu(WMPlex *mplex, ExtlFn handler, ExtlTab tab, extl_table_gets_i(param, "initial", &(fnp.initial)); par.flags=(MPLEX_ATTACH_SWITCHTO| + MPLEX_ATTACH_LEVEL| MPLEX_ATTACH_UNNUMBERED| MPLEX_ATTACH_SIZEPOLICY); par.szplcy=SIZEPOLICY_FULL_BOUNDS; + par.level=STACKING_LEVEL_MODAL1+1; menu=(WMenu*)mplex_do_attach_new(mplex, &par, (WRegionCreateFn*)create_menu, diff --git a/mod_menu/main.c b/mod_menu/main.c index 601e11e..6daa80f 100644 --- a/mod_menu/main.c +++ b/mod_menu/main.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_menu/main.h b/mod_menu/main.h index e779d15..883cefb 100644 --- a/mod_menu/main.h +++ b/mod_menu/main.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_MENU_MAIN_H diff --git a/mod_menu/menu.c b/mod_menu/menu.c index df3a2b0..c87dc59 100644 --- a/mod_menu/menu.c +++ b/mod_menu/menu.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_menu/menu.h b/mod_menu/menu.h index 8d856e0..7ad247c 100644 --- a/mod_menu/menu.h +++ b/mod_menu/menu.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_MENU_MENU_H diff --git a/mod_menu/mkmenu.c b/mod_menu/mkmenu.c index 0c27f73..041e666 100644 --- a/mod_menu/mkmenu.c +++ b/mod_menu/mkmenu.c @@ -3,15 +3,13 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include #include #include +#include #include #include #include "menu.h" @@ -49,11 +47,12 @@ WMenu *mod_menu_do_menu(WMPlex *mplex, ExtlFn handler, ExtlTab tab, fnp.refg.h=0; par.flags=(MPLEX_ATTACH_SWITCHTO| - MPLEX_ATTACH_MODAL| + MPLEX_ATTACH_LEVEL| MPLEX_ATTACH_UNNUMBERED| MPLEX_ATTACH_SIZEPOLICY); par.szplcy=SIZEPOLICY_FULL_BOUNDS; - + par.level=STACKING_LEVEL_MODAL1+1; + return (WMenu*)mplex_do_attach_new(mplex, &par, (WRegionCreateFn*)create_menu, (void*)&fnp); diff --git a/mod_menu/mkmenu.h b/mod_menu/mkmenu.h index 610047f..7a961c8 100644 --- a/mod_menu/mkmenu.h +++ b/mod_menu/mkmenu.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_MENU_MKMENU_H diff --git a/mod_menu/mod_menu.lua b/mod_menu/mod_menu.lua index 705a66e..368115b 100644 --- a/mod_menu/mod_menu.lua +++ b/mod_menu/mod_menu.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- -- This is a slight abuse of the package.loaded variable perhaps, but diff --git a/mod_mgmtmode/Makefile b/mod_mgmtmode/Makefile deleted file mode 100644 index 2d0b769..0000000 --- a/mod_mgmtmode/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -## -## Management mode module Makefile -## - -# System-specific configuration is in system.mk -TOPDIR=.. -include $(TOPDIR)/build/system-inc.mk - -###################################### - -INCLUDES += $(X11_INCLUDES) $(LIBTU_INCLUDES) $(LIBEXTL_INCLUDES) -I.. -CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE) - -SOURCES=main.c mgmtmode.c - -MAKE_EXPORTS=mod_mgmtmode - -MODULE=mod_mgmtmode - -###################################### - -include $(TOPDIR)/build/rules.mk - -###################################### - -_install: module_install diff --git a/mod_mgmtmode/main.c b/mod_mgmtmode/main.c deleted file mode 100644 index ef62c52..0000000 --- a/mod_mgmtmode/main.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * ion/mod_mgmtmode/main.c - * - * Copyright (c) Tuomo Valkonen 2004-2007. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#include -#include -#include - -#include "exports.h" - -/*{{{ Module information */ - - -#include "../version.h" - -char mod_mgmtmode_ion_api_version[]=ION_API_VERSION; - - -/*}}}*/ - - -/*{{{ Bindmaps */ - - -WBindmap *mod_mgmtmode_bindmap=NULL; - - -/*}}}*/ - - -/*{{{ Init & deinit */ - - -void mod_mgmtmode_deinit() -{ - if(mod_mgmtmode_bindmap!=NULL){ - ioncore_free_bindmap("WMgmtMode", mod_mgmtmode_bindmap); - mod_mgmtmode_bindmap=NULL; - } - - mod_mgmtmode_unregister_exports(); -} - - -bool mod_mgmtmode_init() -{ - mod_mgmtmode_bindmap=ioncore_alloc_bindmap("WMgmtMode", NULL); - - if(mod_mgmtmode_bindmap==NULL) - return FALSE; - - if(!mod_mgmtmode_register_exports()){ - mod_mgmtmode_deinit(); - return FALSE; - } - - extl_read_config("cfg_mgmtmode", NULL, TRUE); - - return TRUE; -} - - -/*}}}*/ - diff --git a/mod_mgmtmode/main.h b/mod_mgmtmode/main.h deleted file mode 100644 index 5c9fde4..0000000 --- a/mod_mgmtmode/main.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * ion/mod_mgmtmode/main.h - * - * Copyright (c) Tuomo Valkonen 2004-2007. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#ifndef ION_MOD_MGMTMODE_MAIN_H -#define ION_MOD_MGMTMODE_MAIN_H - -#include - -extern bool mod_mgmtmode_init(); -extern void mod_mgmtmode_deinit(); - -extern WBindmap *mod_mgmtmode_bindmap; - -#endif /* ION_MOD_MGMTMODE_MAIN_H */ diff --git a/mod_mgmtmode/mgmtmode.c b/mod_mgmtmode/mgmtmode.c deleted file mode 100644 index 4b86aa4..0000000 --- a/mod_mgmtmode/mgmtmode.c +++ /dev/null @@ -1,222 +0,0 @@ -/* - * ion/mod_mgmtmode/mgmtmode.c - * - * Copyright (c) Tuomo Valkonen 2004-2007. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include "mgmtmode.h" -#include "main.h" - - -static WMgmtMode *mgmt_mode=NULL; - - -static void cancel_mgmt(WRegion *reg); - - -/*{{{ WMgmtMode */ - - -static bool mgmtmode_init(WMgmtMode *mode, WRegion *reg) -{ - watch_init(&(mode->selw)); - watch_setup(&(mode->selw), (Obj*)reg, NULL); - return TRUE; -} - - -static WMgmtMode *create_mgmtmode(WRegion *reg) -{ - CREATEOBJ_IMPL(WMgmtMode, mgmtmode, (p, reg)); -} - - -static void mgmtmode_deinit(WMgmtMode *mode) -{ - if(mgmt_mode==mode) - mgmt_mode=NULL; - - watch_reset(&(mode->selw)); -} - - -/*EXTL_DOC - * Select management mode target. - */ -EXTL_EXPORT_MEMBER -void mgmtmode_select(WMgmtMode *mode, WRegion *reg) -{ - watch_setup(&(mode->selw), (Obj*)reg, NULL); -} - - -/*EXTL_DOC - * Return management mode target. - */ -EXTL_SAFE -EXTL_EXPORT_MEMBER -WRegion *mgmtmode_selected(WMgmtMode *mode) -{ - return (WRegion*)(mode->selw.obj); -} - - -/*EXTL_DOC - * End management mode. - */ -EXTL_EXPORT_MEMBER -void mgmtmode_finish(WMgmtMode *mode) -{ - if(mgmt_mode==mode) - cancel_mgmt(NULL); -} - - -EXTL_EXPORT -IMPLCLASS(WMgmtMode, Obj, mgmtmode_deinit, NULL); - - -/*}}}*/ - - -/*{{{ Rubberband */ - - -static void draw_rubberbox(WRootWin *rw, const WRectangle *rect) -{ - XPoint fpts[5]; - - fpts[0].x=rect->x; - fpts[0].y=rect->y; - fpts[1].x=rect->x+rect->w; - fpts[1].y=rect->y; - fpts[2].x=rect->x+rect->w; - fpts[2].y=rect->y+rect->h; - fpts[3].x=rect->x; - fpts[3].y=rect->y+rect->h; - fpts[4].x=rect->x; - fpts[4].y=rect->y; - - XDrawLines(ioncore_g.dpy, WROOTWIN_ROOT(rw), rw->xor_gc, fpts, 5, - CoordModeOrigin); -} - - -static void mgmtmode_draw(WMgmtMode *mode) -{ - WRegion *reg=mgmtmode_selected(mode); - - if(reg!=NULL){ - WRootWin *rw=region_rootwin_of(reg); - WRectangle g=REGION_GEOM(reg); - int rx=0, ry=0; - - region_rootpos(reg, &rx, &ry); - - g.x=rx; - g.y=ry; - - draw_rubberbox(rw, &g); - } -} - - -static void mgmtmode_erase(WMgmtMode *mode) -{ - mgmtmode_draw(mode); -} - - -/*}}}*/ - - -/*{{{ The mode */ - - -static bool mgmt_handler(WRegion *reg, XEvent *xev) -{ - XKeyEvent *ev=&xev->xkey; - WBinding *binding=NULL; - WMgmtMode *mode; - - if(ev->type==KeyRelease) - return FALSE; - - if(reg==NULL) - return FALSE; - - mode=mgmt_mode; - - if(mode==NULL) - return FALSE; - - binding=bindmap_lookup_binding(mod_mgmtmode_bindmap, - BINDING_KEYPRESS, - ev->state, ev->keycode); - - if(!binding) - return FALSE; - - if(binding!=NULL){ - mgmtmode_erase(mode); - extl_call(binding->func, "o", NULL, mode); - if(mgmt_mode!=NULL) - mgmtmode_draw(mgmt_mode); - } - - return (mgmt_mode==NULL); -} - - -static void cancel_mgmt(WRegion *reg) -{ - if(mgmt_mode!=NULL){ - mgmtmode_erase(mgmt_mode); - destroy_obj((Obj*)mgmt_mode); - } - ioncore_grab_remove(mgmt_handler); -} - - -/*EXTL_DOC - * Begin management mode. - */ -EXTL_EXPORT -WMgmtMode *mod_mgmtmode_begin(WRegion *reg) -{ - if(mgmt_mode!=NULL) - return NULL; - - mgmt_mode=create_mgmtmode(reg); - - if(mgmt_mode==NULL) - return NULL; - - ioncore_grab_establish((WRegion*)region_rootwin_of(reg), - mgmt_handler, - (GrabKilledHandler*)cancel_mgmt, 0); - - mgmtmode_draw(mgmt_mode); - - return mgmt_mode; -} - - -/*}}}*/ diff --git a/mod_mgmtmode/mgmtmode.h b/mod_mgmtmode/mgmtmode.h deleted file mode 100644 index daf7eae..0000000 --- a/mod_mgmtmode/mgmtmode.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * ion/mod_mgmtmode/mgmtmode.h - * - * Copyright (c) Tuomo Valkonen 2004-2007. - * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - */ - -#ifndef ION_MOD_MGMTMODE_MGMTMODE_H -#define ION_MOD_MGMTMODE_MGMTMODE_H - -#include -#include - -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 */ diff --git a/mod_query/complete.c b/mod_query/complete.c index 87cd934..a658037 100644 --- a/mod_query/complete.c +++ b/mod_query/complete.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_query/complete.h b/mod_query/complete.h index d9c9773..3386b18 100644 --- a/mod_query/complete.h +++ b/mod_query/complete.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_COMPLETE_H diff --git a/mod_query/edln.c b/mod_query/edln.c index 911dee7..ca28b38 100644 --- a/mod_query/edln.c +++ b/mod_query/edln.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_query/edln.h b/mod_query/edln.h index ea00f6f..2d46535 100644 --- a/mod_query/edln.h +++ b/mod_query/edln.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_EDLN_H diff --git a/mod_query/fwarn.c b/mod_query/fwarn.c index 5122948..32eb497 100644 --- a/mod_query/fwarn.c +++ b/mod_query/fwarn.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ @@ -14,6 +11,7 @@ #include #include #include +#include #include #include "wmessage.h" #include "fwarn.h" @@ -56,10 +54,11 @@ WMessage *mod_query_do_message(WMPlex *mplex, const char *p) return NULL; par.flags=(MPLEX_ATTACH_SWITCHTO| - MPLEX_ATTACH_MODAL| + MPLEX_ATTACH_LEVEL| MPLEX_ATTACH_UNNUMBERED| MPLEX_ATTACH_SIZEPOLICY); par.szplcy=SIZEPOLICY_FULL_BOUNDS; + par.level=STACKING_LEVEL_MODAL1+1; return (WMessage*)mplex_do_attach_new(mplex, &par, (WRegionCreateFn*)create_wmsg, diff --git a/mod_query/fwarn.h b/mod_query/fwarn.h index 9aed256..9355286 100644 --- a/mod_query/fwarn.h +++ b/mod_query/fwarn.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_FWARN_H diff --git a/mod_query/history.c b/mod_query/history.c index 168f606..0501da7 100644 --- a/mod_query/history.c +++ b/mod_query/history.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_query/history.h b/mod_query/history.h index f27be88..ad98f90 100644 --- a/mod_query/history.h +++ b/mod_query/history.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_HISTORY_H diff --git a/mod_query/input.c b/mod_query/input.c index 57a23c5..2cf1f25 100644 --- a/mod_query/input.c +++ b/mod_query/input.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_query/input.h b/mod_query/input.h index 3dbde2e..3a39b17 100644 --- a/mod_query/input.h +++ b/mod_query/input.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_INPUT_H diff --git a/mod_query/inputp.h b/mod_query/inputp.h index d91960f..5366a1d 100644 --- a/mod_query/inputp.h +++ b/mod_query/inputp.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_INPUTP_H diff --git a/mod_query/listing.c b/mod_query/listing.c index 271d17e..fbac450 100644 --- a/mod_query/listing.c +++ b/mod_query/listing.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_query/listing.h b/mod_query/listing.h index b4d10f0..c8a669f 100644 --- a/mod_query/listing.h +++ b/mod_query/listing.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_LISTING_H diff --git a/mod_query/main.c b/mod_query/main.c index aeef9ae..a360378 100644 --- a/mod_query/main.c +++ b/mod_query/main.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_query/main.h b/mod_query/main.h index 0a3f34f..2fd127f 100644 --- a/mod_query/main.h +++ b/mod_query/main.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_MAIN_H diff --git a/mod_query/mod_query.lua b/mod_query/mod_query.lua index 1bd3e23..b5bdd71 100644 --- a/mod_query/mod_query.lua +++ b/mod_query/mod_query.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- @@ -514,9 +511,9 @@ end --DOC --- This query asks for the name of a client window and attaches --- it to the frame the query was opened in. It uses the completion --- function \fnref{ioncore.complete_clientwin}. +-- This query asks for the name of a client window and switches +-- focus to the one entered. It uses the completion function +-- \fnref{ioncore.complete_clientwin}. function mod_query.query_gotoclient(mplex) mod_query.query(mplex, TR("Go to window:"), nil, mod_query.gotoclient_handler, @@ -525,9 +522,9 @@ function mod_query.query_gotoclient(mplex) end --DOC --- This query asks for the name of a client window and switches --- focus to the one entered. It uses the completion function --- \fnref{ioncore.complete_clientwin}. +-- This query asks for the name of a client window and attaches +-- it to the frame the query was opened in. It uses the completion +-- function \fnref{ioncore.complete_clientwin}. function mod_query.query_attachclient(mplex) mod_query.query(mplex, TR("Attach window:"), nil, mod_query.attachclient_handler, diff --git a/mod_query/mod_query_chdir.lua b/mod_query/mod_query_chdir.lua index 8c60cb1..dcf4d2a 100644 --- a/mod_query/mod_query_chdir.lua +++ b/mod_query/mod_query_chdir.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- local function ws_chdir(mplex, params) diff --git a/mod_query/query.c b/mod_query/query.c index 9418af5..7585b02 100644 --- a/mod_query/query.c +++ b/mod_query/query.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -16,6 +13,7 @@ #include #include #include +#include #include #include "query.h" #include "wedln.h" @@ -45,10 +43,11 @@ WEdln *mod_query_do_query(WMPlex *mplex, const char *prompt, const char *dflt, fnp.completor=completor; par.flags=(MPLEX_ATTACH_SWITCHTO| - MPLEX_ATTACH_MODAL| + MPLEX_ATTACH_LEVEL| MPLEX_ATTACH_UNNUMBERED| MPLEX_ATTACH_SIZEPOLICY); par.szplcy=SIZEPOLICY_FULL_BOUNDS; + par.level=STACKING_LEVEL_MODAL1+1; wedln=(WEdln*)mplex_do_attach_new(mplex, &par, (WRegionCreateFn*)create_wedln, diff --git a/mod_query/query.h b/mod_query/query.h index 3c67b3c..bc23d2b 100644 --- a/mod_query/query.h +++ b/mod_query/query.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_QUERY_H diff --git a/mod_query/wedln-wrappers.c b/mod_query/wedln-wrappers.c index fa5f0e4..ebb76dc 100644 --- a/mod_query/wedln-wrappers.c +++ b/mod_query/wedln-wrappers.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include "wedln.h" diff --git a/mod_query/wedln.c b/mod_query/wedln.c index 470b05b..da29aa9 100644 --- a/mod_query/wedln.c +++ b/mod_query/wedln.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -787,11 +784,12 @@ bool wedln_prev_completion(WEdln *wedln) /*EXTL_DOC * Call completion handler with the text between the beginning of line and * current cursor position, or select next/previous completion from list if in - * auto-show-completions mode and \var{cycle} is set to ``next'' or ``prev'', - * respectively. The \var{mode} may be ``history'' or ``normal''. If it is + * auto-show-completions mode and \var{cycle} is set to \codestr{next} or + * \codestr{prev}, respectively. + * The \var{mode} may be \codestr{history} or \codestr{normal}. If it is * not set, the previous mode is used. Normally next entry is not cycled to * despite the setting of \var{cycle} if mode switch occurs. To override - * this, use ``next-always'' and ``prev-always'' for \var{cycle}. + * this, use \codestr{next-always} and \codestr{prev-always} for \var{cycle}. */ EXTL_EXPORT_MEMBER void wedln_complete(WEdln *wedln, const char *cycle, const char *mode) diff --git a/mod_query/wedln.h b/mod_query/wedln.h index e966b41..9a72864 100644 --- a/mod_query/wedln.h +++ b/mod_query/wedln.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_WEDLN_H diff --git a/mod_query/wmessage.c b/mod_query/wmessage.c index e7c5d3d..f3dda0f 100644 --- a/mod_query/wmessage.c +++ b/mod_query/wmessage.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_query/wmessage.h b/mod_query/wmessage.h index be1bfca..6e936a8 100644 --- a/mod_query/wmessage.h +++ b/mod_query/wmessage.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_QUERY_WMESSAGE_H diff --git a/mod_sm/sm.c b/mod_sm/sm.c index 16bd2d2..03de1c6 100644 --- a/mod_sm/sm.c +++ b/mod_sm/sm.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2004-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_sp/main.c b/mod_sp/main.c index c9f13b4..e30d8c8 100644 --- a/mod_sp/main.c +++ b/mod_sp/main.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2004-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -19,11 +16,14 @@ #include #include #include +#include #include #include #include #include #include +#include +#include #include "main.h" #include "exports.h" @@ -43,6 +43,7 @@ char mod_sp_ion_api_version[]=ION_API_VERSION; #define SP_NAME "*scratchpad*" +#define SPWS_NAME "*scratchws*" /*}}}*/ @@ -58,34 +59,69 @@ static WRegion *create_frame_scratchpad(WWindow *parent, const WFitParams *fp, } -static WFrame *create(WMPlex *mplex, int flags) +static WRegion *create_scratchws(WWindow *parent, const WFitParams *fp, + void *unused) { - WFrame *sp; + WRegion *reg; + WRegionAttachData data; + WGroupAttachParams par; + WGroupWS *ws; + + ws=create_groupws(parent, fp); + + if(ws==NULL) + return NULL; + + region_set_name((WRegion*)ws, SPWS_NAME); + + data.type=REGION_ATTACH_NEW; + data.u.n.fn=create_frame_scratchpad; + data.u.n.param=NULL; + + par.szplcy_set=TRUE; + par.szplcy=SIZEPOLICY_FREE_GLUE; + + par.geom_set=TRUE; + par.geom.w=minof(fp->g.w, CF_SCRATCHPAD_DEFAULT_W); + par.geom.h=minof(fp->g.h, CF_SCRATCHPAD_DEFAULT_H); + par.geom.x=(fp->g.w-par.geom.w)/2; + par.geom.y=(fp->g.h-par.geom.h)/2; + + par.level_set=TRUE; + par.level=STACKING_LEVEL_MODAL1; + + par.bottom=TRUE; + + reg=group_do_attach(&ws->grp, &par, &data); + + if(reg==NULL){ + destroy_obj((Obj*)ws); + return NULL; + } + + region_set_name((WRegion*)reg, SP_NAME); + + return (WRegion*)ws; +} + + +static WRegion *create(WMPlex *mplex, int flags) +{ + WRegion *sp; WMPlexAttachParams par; - int sw=REGION_GEOM(mplex).w, sh=REGION_GEOM(mplex).h; par.flags=(flags |MPLEX_ATTACH_UNNUMBERED - |MPLEX_ATTACH_MODAL |MPLEX_ATTACH_SIZEPOLICY - |MPLEX_ATTACH_GEOM); - par.szplcy=SIZEPOLICY_FREE_GLUE; - - par.geom.w=minof(sw, CF_SCRATCHPAD_DEFAULT_W); - par.geom.h=minof(sh, CF_SCRATCHPAD_DEFAULT_H); - par.geom.x=(sw-par.geom.w)/2; - par.geom.y=(sh-par.geom.h)/2; + |MPLEX_ATTACH_PSEUDOMODAL); + par.szplcy=SIZEPOLICY_FULL_EXACT; - sp=(WFrame*)mplex_do_attach_new((WMPlex*)mplex, &par, - create_frame_scratchpad, - NULL); + sp=mplex_do_attach_new((WMPlex*)mplex, &par, + create_scratchws, + NULL); - - if(sp==NULL){ + if(sp==NULL) warn(TR("Unable to create scratchpad.")); - } - - region_set_name((WRegion*)sp, SP_NAME); return sp; } @@ -99,16 +135,19 @@ static bool is_scratchpad(WRegion *reg) if(nm==NULL) return FALSE; - if(inst_off<0) - return (strcmp(nm, SP_NAME)==0); - else - return (strncmp(nm, SP_NAME, inst_off)==0); + return (inst_off<0 + ? (strcmp(nm, SP_NAME)==0 || + strcmp(nm, SPWS_NAME)==0) + : (strncmp(nm, SP_NAME, inst_off)==0 || + strncmp(nm, SPWS_NAME, inst_off)==0)); } /*EXTL_DOC * Change displayed status of some scratchpad on \var{mplex} if one is - * found. The parameter \var{how} is one of (set/unset/toggle). + * found. The parameter \var{how} is one of + * \codestr{set}, \codestr{unset}, or \codestr{toggle}. + * The resulting status is returned. */ EXTL_EXPORT bool mod_sp_set_shown_on(WMPlex *mplex, const char *how) @@ -137,7 +176,9 @@ bool mod_sp_set_shown_on(WMPlex *mplex, const char *how) /*EXTL_DOC * Toggle displayed status of \var{sp}. - * The parameter \var{how} is one of (set/unset/toggle). + * The parameter \var{how} is one of + * \codestr{set}, \codestr{unset}, or \codestr{toggle}. + * The resulting status is returned. */ EXTL_EXPORT bool mod_sp_set_shown(WFrame *sp, const char *how) diff --git a/mod_sp/main.h b/mod_sp/main.h index 45b85e0..c08030f 100644 --- a/mod_sp/main.h +++ b/mod_sp/main.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 2004-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_SP_MAIN_H diff --git a/mod_statusbar/draw.c b/mod_statusbar/draw.c index 19ba93a..639295f 100644 --- a/mod_statusbar/draw.c +++ b/mod_statusbar/draw.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_statusbar/draw.h b/mod_statusbar/draw.h index 0724973..2cda82b 100644 --- a/mod_statusbar/draw.h +++ b/mod_statusbar/draw.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_STATUSBAR_DRAW_H diff --git a/mod_statusbar/main.c b/mod_statusbar/main.c index bf0e1d0..b6a0e73 100644 --- a/mod_statusbar/main.c +++ b/mod_statusbar/main.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -254,7 +251,7 @@ static bool clientwin_do_manage_hook(WClientWin *cwin, const WManageParams *para return FALSE; return region_manage_clientwin((WRegion*)sb, cwin, param, - MANAGE_REDIR_PREFER_NO); + MANAGE_PRIORITY_NONE); } diff --git a/mod_statusbar/main.h b/mod_statusbar/main.h index fa4dbfd..806adc9 100644 --- a/mod_statusbar/main.h +++ b/mod_statusbar/main.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_STATUSBAR_MAIN_H diff --git a/mod_statusbar/mod_statusbar.lua b/mod_statusbar/mod_statusbar.lua index 3164927..81db1a4 100644 --- a/mod_statusbar/mod_statusbar.lua +++ b/mod_statusbar/mod_statusbar.lua @@ -3,10 +3,7 @@ -- -- Copyright (c) Tuomo Valkonen 2004-2007. -- --- Ion is free software; you can redistribute it and/or modify it under --- the terms of the GNU Lesser General Public License as published by --- the Free Software Foundation; either version 2.1 of the License, or --- (at your option) any later version. +-- See the included file LICENSE for details. -- -- This is a slight abuse of the package.loaded variable perhaps, but @@ -238,7 +235,9 @@ end --DOC --- Load modules and launch ion-statusd with configuration table \var{cfg}. +-- Load modules and launch \file{ion-statusd} with configuration +-- table \var{cfg}. The options for each \file{ion-statusd} monitor +-- script should be contained in the corresponding sub-table of \var{cfg}. function mod_statusbar.launch_statusd(cfg) if statusd_pid>0 then return @@ -292,7 +291,23 @@ end -- Initialisation and default settings {{{ --DOC --- Create a statusbar. +-- Create a statusbar. The possible parameters in the +-- table \var{param} are: +-- +-- \begin{tabularx}{\linewidth}{llX} +-- Variable & Type & Description \\ +-- \var{template} & string & The template; see +-- Section \ref{sec:statusbar}. \\ +-- \var{pos} & string & Position: \code{"tl"}, \code{"tr"}, +-- \code{"bl"} or \code{"br"} +-- (for the obvious combinations of +-- top/left/bottom/right). \\ +-- \var{screen} & integer & Screen number to create the statusbar on. \\ +-- \var{fullsize} & boolean & If set, the statusbar will waste +-- space instead of adapting to layout. \\ +-- \var{systray} & boolaen & Swallow (KDE protocol) systray icons. \\ +-- \end{tabularx} +-- function mod_statusbar.create(param) local scr=ioncore.find_screen_id(param.screen or 0) if not scr then diff --git a/mod_statusbar/statusbar.c b/mod_statusbar/statusbar.c index 261560c..e4adc77 100644 --- a/mod_statusbar/statusbar.c +++ b/mod_statusbar/statusbar.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -553,9 +550,9 @@ static WRegion *statusbar_attach_ph(WStatusBar *sb, int flags, static WPHolder *statusbar_prepare_manage(WStatusBar *sb, const WClientWin *cwin, const WManageParams *param, - int redir) + int priority) { - if(redir==MANAGE_REDIR_STRICT_YES) + if(!MANAGE_PRIORITY_OK(priority, MANAGE_PRIORITY_LOW)) return NULL; return (WPHolder*)create_basicpholder((WRegion*)sb, @@ -664,7 +661,7 @@ WPHolder *statusbar_prepare_manage_transient(WStatusBar *sb, if(mgr!=NULL) return region_prepare_manage(mgr, cwin, param, - MANAGE_REDIR_PREFER_NO); + MANAGE_PRIORITY_NONE); else return NULL; } @@ -1038,7 +1035,8 @@ bool statusbar_set_systray(WStatusBar *sb, int sp) /*EXTL_DOC * Enable or disable use of \var{sb} as systray. - * The parameter \var{how} can be one of (set/unset/toggle). + * The parameter \var{how} can be one of + * \codestr{set}, \codestr{unset}, or \codestr{toggle}. * Resulting state is returned. */ EXTL_EXPORT_AS(WStatusBar, set_systray) @@ -1051,7 +1049,7 @@ bool statusbar_set_systray_extl(WStatusBar *sb, const char *how) /*EXTL_DOC * Is \var{sb} used as a systray? */ -EXTL_EXPORT_MEMBER +EXTL_EXPORT_AS(WStatusBar, is_systray) bool statusbar_is_systray_extl(WStatusBar *sb) { return sb->systray_enabled; diff --git a/mod_statusbar/statusbar.h b/mod_statusbar/statusbar.h index 8392f16..8c1cec0 100644 --- a/mod_statusbar/statusbar.h +++ b/mod_statusbar/statusbar.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_STATUSBAR_STATUSBAR_H diff --git a/mod_tiling/main.c b/mod_tiling/main.c index 4787870..36c5e26 100644 --- a/mod_tiling/main.c +++ b/mod_tiling/main.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_tiling/main.h b/mod_tiling/main.h index 08bb446..ade0cf5 100644 --- a/mod_tiling/main.h +++ b/mod_tiling/main.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_TILING_MAIN_H diff --git a/mod_tiling/ops.c b/mod_tiling/ops.c index 6ec45e4..75570e0 100644 --- a/mod_tiling/ops.c +++ b/mod_tiling/ops.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_tiling/panehandle.c b/mod_tiling/panehandle.c index 480e02d..4321d3c 100644 --- a/mod_tiling/panehandle.c +++ b/mod_tiling/panehandle.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_tiling/panehandle.h b/mod_tiling/panehandle.h index fe06f3e..8aa8b7c 100644 --- a/mod_tiling/panehandle.h +++ b/mod_tiling/panehandle.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_PANEWS_PANEHANDLE_H diff --git a/mod_tiling/placement.c b/mod_tiling/placement.c index 07de5f4..7e45806 100644 --- a/mod_tiling/placement.c +++ b/mod_tiling/placement.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -72,16 +69,14 @@ static bool placement_mrsh_extl(ExtlFn fn, WTilingPlacementParams *param) WPHolder *tiling_prepare_manage(WTiling *ws, const WClientWin *cwin, - const WManageParams *mp, int redir) + const WManageParams *mp, int priority) { + int cpriority=MANAGE_PRIORITY_SUBX(priority, MANAGE_PRIORITY_NORMAL); WRegion *target=NULL; WTilingPlacementParams param; WPHolder *ph; bool ret; - - if(redir==MANAGE_REDIR_STRICT_NO) - return NULL; - + param.ws=ws; param.reg=(WRegion*)cwin; param.mp=mp; @@ -95,7 +90,7 @@ WPHolder *tiling_prepare_manage(WTiling *ws, const WClientWin *cwin, target=(WRegion*)param.res_frame; - ph=region_prepare_manage(target, cwin, mp, redir); + ph=region_prepare_manage(target, cwin, mp, cpriority); if(ph!=NULL) return ph; } @@ -108,6 +103,6 @@ WPHolder *tiling_prepare_manage(WTiling *ws, const WClientWin *cwin, return NULL; } - return region_prepare_manage(target, cwin, mp, redir); + return region_prepare_manage(target, cwin, mp, cpriority); } diff --git a/mod_tiling/placement.h b/mod_tiling/placement.h index a61f892..f9d9338 100644 --- a/mod_tiling/placement.h +++ b/mod_tiling/placement.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_TILING_PLACEMENT_H diff --git a/mod_tiling/split-stdisp.c b/mod_tiling/split-stdisp.c index 352ba41..ac6175c 100644 --- a/mod_tiling/split-stdisp.c +++ b/mod_tiling/split-stdisp.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_tiling/split-stdisp.h b/mod_tiling/split-stdisp.h index 4f6ca59..b2b9159 100644 --- a/mod_tiling/split-stdisp.h +++ b/mod_tiling/split-stdisp.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_TILING_SPLIT_STDISP_H diff --git a/mod_tiling/split.c b/mod_tiling/split.c index 381bbb3..d05cc58 100644 --- a/mod_tiling/split.c +++ b/mod_tiling/split.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -1341,6 +1338,11 @@ WSplit *split_current_todir(WSplit *node, WPrimn hprimn, WPrimn vprimn, } +/* Note: both hprimn and vprimn are inverted when descending. Therefore + * one should be either PRIMN_NONE or PRIMN_ANY for sensible geometric + * navigation. (Both are PRIMN_TL or PRIMN_BR for pseudo-linear + * next/previous navigation.) + */ WSplit *splitsplit_nextto(WSplitSplit *node, WSplit *child, WPrimn hprimn, WPrimn vprimn, WSplitFilter *filter) @@ -1348,26 +1350,21 @@ WSplit *splitsplit_nextto(WSplitSplit *node, WSplit *child, WPrimn primn=(node->dir==SPLIT_HORIZONTAL ? hprimn : vprimn); WSplit *split=NULL, *nnode=NULL; - if(node->tl==child && (primn==PRIMN_BR || primn==PRIMN_ANY)){ + if(node->tl==child && (primn==PRIMN_BR || primn==PRIMN_ANY)) split=node->br; - primn=PRIMN_TL; - }else if(node->br==child && (primn==PRIMN_TL || primn==PRIMN_ANY)){ + else if(node->br==child && (primn==PRIMN_TL || primn==PRIMN_ANY)) split=node->tl; - primn=PRIMN_BR; - } if(split!=NULL){ - if(node->dir==SPLIT_HORIZONTAL){ - hprimn=primn; - vprimn=primn_none2any(vprimn); - }else{ - vprimn=primn; - hprimn=primn_none2any(vprimn); - } - - nnode=split_current_todir(split, hprimn, vprimn, filter); + nnode=split_current_todir(split, + primn_none2any(primn_invert(hprimn)), + primn_none2any(primn_invert(vprimn)), + filter); } - + + if(nnode==NULL) + nnode=split_nextto((WSplit*)node, hprimn, vprimn, filter); + return nnode; } @@ -1818,8 +1815,8 @@ WSplit *splitsplit_br(WSplitSplit *split) } /*EXTL_DOC - * Returns the direction of \var{split}; either ''vertical'' or - * ''horizontal''. + * Returns the direction of \var{split}; either \codestr{vertical} or + * \codestr{horizontal}. */ EXTL_SAFE EXTL_EXPORT_MEMBER diff --git a/mod_tiling/split.h b/mod_tiling/split.h index 10a0e5f..332b92c 100644 --- a/mod_tiling/split.h +++ b/mod_tiling/split.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_TILING_SPLIT_H diff --git a/mod_tiling/splitfloat.c b/mod_tiling/splitfloat.c index ff71afd..d746061 100644 --- a/mod_tiling/splitfloat.c +++ b/mod_tiling/splitfloat.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/mod_tiling/splitfloat.h b/mod_tiling/splitfloat.h index 8d51b59..270aed0 100644 --- a/mod_tiling/splitfloat.h +++ b/mod_tiling/splitfloat.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_TILING_SPLITFLOAT_H diff --git a/mod_tiling/tiling.c b/mod_tiling/tiling.c index bbefef7..6fec372 100644 --- a/mod_tiling/tiling.c +++ b/mod_tiling/tiling.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -262,25 +259,6 @@ Window tiling_xwindow(const WTiling *ws) } -WPHolder *tiling_prepare_manage_transient(WTiling *ws, - const WClientWin *transient, - const WManageParams *param, - int unused) -{ - /* Transient manager searches should not cross tilings unless - * explicitly floated. - */ - if(extl_table_is_bool_set(transient->proptab, "float")){ - return region_prepare_manage_transient_default((WRegion*)ws, - transient, - param, - unused); - }else{ - return NULL; - } -} - - /*}}}*/ @@ -1021,9 +999,10 @@ static WFrame *tiling_do_split(WTiling *ws, WSplit *node, /*EXTL_DOC - * Create a new frame on \var{ws} above/below/left of/right of - * \var{node} as indicated by \var{dirstr}. If \var{dirstr} is - * prefixed with ''floating:'' a floating split is created. + * Create a new frame on \var{ws} \codestr{above}, \codestr{below} + * \codestr{left} of, or \codestr{right} of \var{node} as indicated + * by \var{dirstr}. If \var{dirstr} is prefixed with + * \codestr{floating:} a floating split is created. */ EXTL_EXPORT_MEMBER WFrame *tiling_split(WTiling *ws, WSplit *node, const char *dirstr) @@ -1049,11 +1028,12 @@ WFrame *tiling_split_top(WTiling *ws, const char *dirstr) /*EXTL_DOC * Split \var{frame} creating a new frame to direction \var{dirstr} - * (one of ''left'', ''right'', ''top'' or ''bottom'') of \var{frame}. + * (one of \codestr{left}, \codestr{right}, \codestr{top} or + * \codestr{bottom}) of \var{frame}. * If \var{attach_current} is set, the region currently displayed in * \var{frame}, if any, is moved to thenew frame. - * If \var{dirstr} is prefixed with ''floating:'' a floating split is - * created. + * If \var{dirstr} is prefixed with \codestr{floating:}, a floating + * split is created. */ EXTL_EXPORT_MEMBER WFrame *tiling_split_at(WTiling *ws, WFrame *frame, const char *dirstr, @@ -1177,7 +1157,8 @@ WSplit *tiling_split_tree(WTiling *ws) /*EXTL_DOC * Return the most previously active region next to \var{reg} in - * direction \var{dirstr} (left/right/up/down). The region \var{reg} + * direction \var{dirstr} (\codestr{left}, \codestr{right}, \codestr{up}, + * or \codestr{down}). The region \var{reg} * must be managed by \var{ws}. If \var{any} is not set, the status display * is not considered. */ @@ -1198,8 +1179,8 @@ WRegion *tiling_nextto(WTiling *ws, WRegion *reg, const char *dirstr, /*EXTL_DOC * Return the most previously active region on \var{ws} with no * other regions next to it in direction \var{dirstr} - * (left/right/up/down). If \var{any} is not set, the status - * display is not considered. + * (\codestr{left}, \codestr{right}, \codestr{up}, or \codestr{down}). + * If \var{any} is not set, the status display is not considered. */ EXTL_SAFE EXTL_EXPORT_MEMBER @@ -1375,8 +1356,8 @@ WSplitSplit *tiling_set_floating(WTiling *ws, WSplitSplit *split, int sp) /*EXTL_DOC * Toggle floating of a split's sides at \var{split} as indicated by the - * parameter \var{how} (set/unset/toggle). A split of the appropriate is - * returned, if there was a change. + * parameter \var{how} (\codestr{set}, \codestr{unset}, or \codestr{toggle}). + * A split of the appropriate is returned, if there was a change. */ EXTL_EXPORT_AS(WTiling, set_floating) WSplitSplit *tiling_set_floating_extl(WTiling *ws, WSplitSplit *split, @@ -1390,9 +1371,10 @@ WSplitSplit *tiling_set_floating_extl(WTiling *ws, WSplitSplit *split, /*EXTL_DOC * Toggle floating of the sides of a split containin \var{reg} as indicated - * by the parameters \var{how} (set/unset/toggle) and \var{dirstr} - * (left/right/up/down/any). The new status is returned (and \code{false} - * also on error). + * by the parameters \var{how} (\codestr{set}, \codestr{unset}, or + * \codestr{toggle}) and \var{dirstr} (\codestr{left}, \codestr{right}, + * \codestr{up}, or \codestr{down}). The new status is returned + * (and \code{false} also on error). */ EXTL_EXPORT_AS(WTiling, set_floating_at) bool tiling_set_floating_at_extl(WTiling *ws, WRegion *reg, const char *how, @@ -1771,9 +1753,6 @@ static DynFunTab tiling_dynfuntab[]={ {(DynFun*)region_xwindow, (DynFun*)tiling_xwindow}, - {(DynFun*)region_prepare_manage_transient, - (DynFun*)tiling_prepare_manage_transient}, - END_DYNFUNTAB }; diff --git a/mod_tiling/tiling.h b/mod_tiling/tiling.h index 31abe91..26737ab 100644 --- a/mod_tiling/tiling.h +++ b/mod_tiling/tiling.h @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #ifndef ION_MOD_TILING_TILING_H diff --git a/modulelist.mk b/modulelist.mk index 4339987..b36b752 100644 --- a/modulelist.mk +++ b/modulelist.mk @@ -3,8 +3,8 @@ ## MODULE_LIST = mod_tiling mod_query mod_menu \ - mod_dock mod_sp mod_sm de \ - mod_mgmtmode mod_statusbar + mod_dock mod_sp mod_sm mod_statusbar \ + de # Modules to -dlpreload into pwm if statically linking. diff --git a/po/Makefile b/po/Makefile index 2339738..2db7db1 100644 --- a/po/Makefile +++ b/po/Makefile @@ -13,7 +13,7 @@ MSGMERGE = msgmerge MSGCAT = msgcat LXGETTEXT = lua-xgettext -TRANSLATIONS := fi cs de ru +TRANSLATIONS := fi cs MO_FILES := $(patsubst %,%.mo, $(TRANSLATIONS)) PO_FILES := $(patsubst %,%.po, $(TRANSLATIONS)) @@ -89,8 +89,3 @@ update_fi: pot update_cs: pot $(MSGMERGE) -U cs.po $(POTFILE) -update_ru: pot - $(MSGMERGE) -U ru.po $(POTFILE) - -update_de: pot - $(MSGMERGE) -U de.po $(POTFILE) diff --git a/po/cs.po b/po/cs.po index 41235cf..8debea9 100644 --- a/po/cs.po +++ b/po/cs.po @@ -1,7 +1,7 @@ # # Czech language translations for Ion3. # -# Copyright (c) Miroslav Kure 2004,2005,2006. +# Copyright (c) Miroslav Kure 2004,2005,2006,2007. # # This file is distributed under the same license as the Ion3 package. # @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Ion3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-11-12 12:07+0100\n" -"PO-Revision-Date: 2006-11-12 12:16+0100\n" +"POT-Creation-Date: 2007-04-22 15:41+0200\n" +"PO-Revision-Date: 2007-04-22 15:42+0200\n" "Last-Translator: Miroslav Kure \n" "Language-Team: none\n" "MIME-Version: 1.0\n" @@ -92,7 +92,7 @@ msgid "Time request from X server failed." msgstr "Èasový po¾adavek od X serveru selhal." # -#: ../ioncore/exec.c:177 +#: ../ioncore/exec.c:186 msgid "Not saving state: running under session manager." msgstr "Neukládám stav: bì¾ím pod správcem sezení." @@ -147,36 +147,32 @@ msgstr "Nebyl zad msgid "Invalid arguments." msgstr "Neplatné argumenty." -#: ../ioncore/screen.c:298 -msgid "act: " -msgstr "act: " - -#: ../ioncore/screen.c:481 -msgid "Only workspace may not be destroyed." -msgstr "Poslední pracovní plocha nemù¾e být zru¹ena." +#: ../ioncore/screen.c:385 +msgid "Only workspace may not be destroyed/detached." +msgstr "Jediná pracovní plocha nemù¾e být zru¹ena." -#: ../ioncore/screen.c:489 +#: ../ioncore/screen.c:396 msgid "Screens may not be destroyed." msgstr "Obrazovky nesmí být znièeny." -#: ../ioncore/screen.c:525 +#: ../ioncore/screen.c:432 msgid "Invalid offset." msgstr "Neplatné odsazení" -#: ../ioncore/screen.c:568 +#: ../ioncore/screen.c:471 #, c-format msgid "Unable to create a workspace on screen %d." msgstr "Nemohu vytvoøit pracovní plochu na obrazovce %d." -#: ../ioncore/sizehint.c:151 +#: ../ioncore/sizehint.c:157 msgid "Invalid client-supplied width/height increment." msgstr "Klient zadal neplatný pøírùstek ¹íøky/vý¹ky." -#: ../ioncore/sizehint.c:159 +#: ../ioncore/sizehint.c:165 msgid "Invalid client-supplied aspect-ratio." msgstr "Klient zadal neplatný pomìr stran." -#: ../ioncore/ioncore.c:74 +#: ../ioncore/ioncore.c:78 msgid "" "This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU Lesser General Public\n" @@ -196,16 +192,16 @@ msgstr "" "JAKÉKOLIV ZÁRUKY. Pro více podrobností se podívejte do licence GNU\n" "Lesser General Public License.\n" -#: ../ioncore/ioncore.c:155 +#: ../ioncore/ioncore.c:159 msgid "No encoding given in LC_CTYPE." msgstr "V LC_CTYPE není zadáno kódování." -#: ../ioncore/ioncore.c:437 +#: ../ioncore/ioncore.c:470 #, c-format msgid "Could not connect to X display '%s'" msgstr "Nemohu se pøipojit na X displej \"%s\"" -#: ../ioncore/ioncore.c:489 +#: ../ioncore/ioncore.c:522 msgid "Could not find a screen to manage." msgstr "Nemohu najít obrazovku, kterou bych mohl spravovat." @@ -225,12 +221,12 @@ msgstr "Vstupn msgid "Failed to create input context." msgstr "Selhalo vytvoøení vstupního kontextu." -#: ../ioncore/clientwin.c:411 +#: ../ioncore/clientwin.c:379 #, c-format msgid "The transient_for hint for \"%s\" points to itself." msgstr "Nápovìda transient_for pro \"%s\" ukazuje sama na sebe." -#: ../ioncore/clientwin.c:415 +#: ../ioncore/clientwin.c:383 #, c-format msgid "" "Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" " @@ -239,36 +235,36 @@ msgstr "" "Klientské okno \"%s\" má poru¹enou nápovìdu transient_for. (Schizofrenie " "více rodièù \"Extended WM hints\"?)" -#: ../ioncore/clientwin.c:420 +#: ../ioncore/clientwin.c:388 #, c-format msgid "The transient_for window for \"%s\" is not on the same screen." msgstr "Okno transient_for pro \"%s\" není na stejné obrazovce." -#: ../ioncore/clientwin.c:440 ../ioncore/clientwin.c:527 -#: ../ioncore/clientwin.c:1300 +#: ../ioncore/clientwin.c:408 ../ioncore/clientwin.c:496 +#: ../ioncore/clientwin.c:1292 #, c-format msgid "Window %#x disappeared." msgstr "Okno %#x zmizelo." -#: ../ioncore/clientwin.c:547 +#: ../ioncore/clientwin.c:516 msgid "Unable to find a matching root window!" msgstr "Nemohu najít odpovídající koøenové okno!" -#: ../ioncore/clientwin.c:582 +#: ../ioncore/clientwin.c:555 #, c-format msgid "Unable to manage client window %#x." msgstr "Nemohu spravovat klientské okno %#x." -#: ../ioncore/clientwin.c:633 +#: ../ioncore/clientwin.c:604 msgid "Changes is WM_TRANSIENT_FOR property are unsupported." msgstr "Zmìny vlastnosti WM_TRANSIENT_FOR nejsou podporovány." # -#: ../ioncore/clientwin.c:809 +#: ../ioncore/clientwin.c:776 msgid "Client does not support the WM_DELETE protocol." msgstr "Klient nepodporuje protokol WM_DELETE." -#: ../ioncore/clientwin.c:1306 +#: ../ioncore/clientwin.c:1298 msgid "Saved client window does not want to be managed." msgstr "Ulo¾ené klientské okno nechce být spravováno." @@ -277,74 +273,65 @@ msgstr "Ulo msgid "Unable to store colourmap watch info." msgstr "Nemohu ulo¾it informace o barevné mapì." -#: ../ioncore/region.c:46 +#: ../ioncore/region.c:47 msgid "Creating region with negative width or height!" msgstr "Vytváøím oblast se zápornou ¹íøkou nebo vý¹kou!" -#: ../ioncore/region.c:94 +#: ../ioncore/region.c:95 #, c-format msgid "Destroying object \"%s\" with client windows as children." msgstr "Nièím objekt \"%s\" spoleènì s klientskými okny jako dìtmi." -#: ../ioncore/region.c:395 +#: ../ioncore/region.c:434 +#, c-format +msgid "Can not destroy %s: contains client windows." +msgstr "Nemohu znièit %s: obsahuje klientská okna." + +#: ../ioncore/region.c:435 +msgid "(unknown)" +msgstr "(neznámý)" + +#: ../ioncore/region.c:498 msgid "Failed to rescue some client windows - not closing." msgstr "Záchrana nìkterých klientských oken selhala - nezavírám." -#: ../ioncore/attach.c:71 ../ioncore/pholder.c:46 -msgid "Unable to reparent." -msgstr "Nemohu zmìnit rodièe." - -#: ../ioncore/attach.c:157 ../ioncore/frame-pointer.c:282 +#: ../ioncore/attach.c:58 ../ioncore/frame-pointer.c:280 #, c-format msgid "Attempt to make region %s manage its ancestor %s." msgstr "Pokus, aby oblast %s spravovala svého pøedka %s." -#: ../ioncore/manage.c:77 +#: ../ioncore/attach.c:83 +msgid "Unable to reparent." +msgstr "Nemohu zmìnit rodièe." + +#: ../ioncore/attach.c:92 +msgid "Unexpected attach error: trying to recover by attaching to screen." +msgstr "Neoèekávaná chyba pøipojení: zkou¹ím obnovit pøipojením k obrazovce." + +#: ../ioncore/attach.c:111 +msgid "Failed recovery." +msgstr "Obnovení selhalo." + +#: ../ioncore/manage.c:193 msgid "Unable to find a screen for a new client window." msgstr "Nemohu najít obrazovku pro nové klientské okno." -#: ../ioncore/rootwin.c:223 +#: ../ioncore/rootwin.c:218 #, c-format msgid "Unable to redirect root window events for screen %d." msgstr "Nemohu pøesmìrovat události koøenového okna na obrazovce %d." -#: ../ioncore/rootwin.c:319 ../ioncore/rootwin.c:344 -msgid "Xinerama sanity check failed; overlapping screens detected." -msgstr "Kontrola Xineramy selhala: byly nalezeny pøekrývající se obrazovky." - -#: ../ioncore/rootwin.c:326 ../ioncore/rootwin.c:351 -msgid "Xinerama sanity check failed; zero size detected." -msgstr "Kontrola Xineramy selhala: byla nalezena nulová velikost." - -#: ../ioncore/rootwin.c:379 ../ioncore/rootwin.c:397 -msgid "Don't know how to get Xinerama information for multiple X root windows." -msgstr "Nevím, jak zpracovat informace z Xineramy pro více koøenových oken." - -#: ../ioncore/rootwin.c:393 -msgid "Error retrieving Xinerama information." -msgstr "Chyba pøi získávání informaci z Xineramy." - -#: ../ioncore/rootwin.c:432 ../ioncore/rootwin.c:451 -#, c-format -msgid "Unable to setup Xinerama screen %d." -msgstr "Nemohu nastavit obrazovku Xineramy %d." - -#: ../ioncore/rootwin.c:464 -#, c-format -msgid "Unable to setup X screen %d." -msgstr "Nemohu nastavit X obrazovku %d." - -#: ../ioncore/names.c:90 +#: ../ioncore/names.c:91 #, c-format msgid "Corrupt instance number %s." msgstr "Poru¹ená instance èíslo %s." -#: ../ioncore/saveload.c:125 +#: ../ioncore/saveload.c:98 #, c-format msgid "Unknown class \"%s\", cannot create region." msgstr "Neznámá tøída \"%s\", nemohu vytvoøit oblast." -#: ../ioncore/saveload.c:205 +#: ../ioncore/saveload.c:202 #, c-format msgid "" "There were errors loading layout. Backing up current layout savefile as\n" @@ -362,46 +349,46 @@ msgstr "" "Pøedtím nezapomeòte opravit konfiguraèní soubory, které zpùsobily tyto\n" "problémy. (Mo¾ná chybìjící modul?)" -#: ../ioncore/saveload.c:248 +#: ../ioncore/saveload.c:253 msgid "Unable to get file for layout backup." msgstr "Nemohu získat soubor pro zálohu rozlo¾ení." -#: ../ioncore/saveload.c:252 +#: ../ioncore/saveload.c:257 #, c-format msgid "Backup file %s already exists." msgstr "Zálo¾ní soubor %s ji¾ existuje." -#: ../ioncore/saveload.c:258 +#: ../ioncore/saveload.c:263 msgid "Failed backup." msgstr "Selhala záloha." # -#: ../ioncore/saveload.c:263 +#: ../ioncore/saveload.c:268 msgid "Unable to initialise layout on any screen." msgstr "Na ¾ádné obrazovce nemohu inicializovat rozlo¾ení." -#: ../ioncore/saveload.c:283 +#: ../ioncore/saveload.c:295 #, c-format msgid "Unable to get configuration for screen %d." msgstr "Nemohu získat nastavení pro obrazovku %d." -#: ../ioncore/saveload.c:296 +#: ../ioncore/saveload.c:308 msgid "Unable to save layout." msgstr "Nemohu ulo¾it rozlo¾ení." -#: ../ioncore/conf.c:143 +#: ../ioncore/conf.c:235 msgid "User directory can not be set." msgstr "U¾ivatelský adresáø nemù¾e být nastaven." -#: ../ioncore/conf.c:217 +#: ../ioncore/conf.c:309 msgid "Some bindmaps were empty, loading ioncore_efbb." msgstr "Nìkteré tabulky kláves jsou prázdné, nahrávám ioncore_efbb." -#: ../ioncore/fullscreen.c:98 +#: ../ioncore/fullscreen.c:49 msgid "Failed to enter full screen mode." msgstr "Selhal pøechod do celoobrazovkového re¾imu." -#: ../ioncore/fullscreen.c:120 +#: ../ioncore/fullscreen.c:83 msgid "" "Failed to return from full screen mode; remaining manager or parent from " "previous location refused to manage us." @@ -409,44 +396,40 @@ msgstr "" "Návrat z celoobrazovkového re¾imu se nezdaøil; zbývající správce nebo rodiè " "z pøedchozího umístìní nás nechce spravovat." -#: ../ioncore/mplex.c:172 -msgid "Refusing to destroy - not empty." -msgstr "Odmítám zru¹it - není prázdné." - # -#: ../ioncore/mplex.c:1678 +#: ../ioncore/mplex.c:1685 msgid "Invalid position setting." msgstr "Neplatné nastavení pozice." # -#: ../ioncore/mplex.c:1718 +#: ../ioncore/mplex.c:1725 msgid "Invalid action setting." msgstr "Neplatné nastavení akce." -#: ../ioncore/gr.c:119 +#: ../ioncore/gr.c:120 #, c-format msgid "Drawing engine %s is not registered!" msgstr "Vykreslovací jednotka %s není registrována!" -#: ../ioncore/gr.c:138 +#: ../ioncore/gr.c:139 #, c-format msgid "Unable to find brush for style '%s'." msgstr "Nemohu najít ¹tìtec pro styl \"%s\"." -#: ../ioncore/gr.c:408 +#: ../ioncore/gr.c:646 msgid "No drawing engines loaded, trying \"de\"." msgstr "Nebyly nahrány ¾ádné vykreslovací jednotky, zkou¹ím \"%s\"." -#: ../ioncore/group.c:184 ../mod_tiling/tiling.c:96 +#: ../ioncore/frame-draw.c:314 +msgid "" +msgstr "" + +#: ../ioncore/group.c:186 ../mod_tiling/tiling.c:92 #, c-format msgid "Error reparenting %s." msgstr "Chyba zmìny rodièe %s." -#: ../ioncore/group.c:481 ../mod_tiling/tiling.c:668 -msgid "Workspace not empty - refusing to destroy." -msgstr "Pracovní plocha není prázdná - odmítám zru¹it." - -#: ../ioncore/group.c:680 +#: ../ioncore/group.c:711 msgid "'bottom' already set." msgstr "'bottom' je ji¾ nastaven." @@ -458,100 +441,109 @@ msgstr "Neplatn msgid "Invalid direction parameter." msgstr "Neplatný parametr smìru." -#: ../ioncore/group-ws.c:67 +#: ../ioncore/group-ws.c:51 #, c-format msgid "Unknown placement method \"%s\"." msgstr "Neznámý zpùsob umístìní \"%s\"." +#: ../ioncore/detach.c:176 +msgid "Failed to reattach." +msgstr "Znovupøipojení selhalo." + +#: ../ioncore/screen-notify.c:190 +msgid "act: " +msgstr "akt: " + # -#: ../mod_tiling/tiling.c:77 +#: ../mod_tiling/tiling.c:73 msgid "Split not on workspace." msgstr "Rozdìlení není na pracovní plo¹e." -#: ../mod_tiling/tiling.c:373 +#: ../mod_tiling/tiling.c:348 msgid "Unable to create a node for status display." msgstr "Nemohu vytvoøit uzel pro stavový øádek." -#: ../mod_tiling/tiling.c:386 +#: ../mod_tiling/tiling.c:361 msgid "Unable to create new split for status display." msgstr "Nemohu vytvoøit nové rozdìlení pro stavový øádek." -#: ../mod_tiling/tiling.c:937 +#: ../mod_tiling/tiling.c:710 +msgid "Tiling in useless state." +msgstr "Dl¾dice v neu¾iteèném stavu." + +#: ../mod_tiling/tiling.c:924 msgid "Invalid direction" msgstr "Neplatný smìr" # -#: ../mod_tiling/tiling.c:970 ../mod_tiling/split.c:1018 +#: ../mod_tiling/tiling.c:957 ../mod_tiling/split.c:1018 msgid "Invalid node." msgstr "Neplatný uzel." # -#: ../mod_tiling/tiling.c:989 +#: ../mod_tiling/tiling.c:976 msgid "Unable to split." msgstr "Nemohu rozdìlit." -#: ../mod_tiling/tiling.c:1092 -msgid "Nil frame." -msgstr "Prázdný rám." - -#: ../mod_tiling/tiling.c:1097 -msgid "The frame is not managed by the workspace." -msgstr "Rám není spravován pracovní plochou." +#: ../mod_tiling/tiling.c:1090 +msgid "" +"Unable to unsplit: Could not move client windows elsewhere within the tiling." +msgstr "Nemohu slouèit: Nemohu pøesunout klientské okno nìkam do dla¾dic." -#: ../mod_tiling/tiling.c:1196 +#: ../mod_tiling/tiling.c:1207 msgid "Nil parameter." msgstr "Prázdný parametr." -#: ../mod_tiling/tiling.c:1201 +#: ../mod_tiling/tiling.c:1212 msgid "Manager doesn't match." msgstr "Správce se neshoduje." -#: ../mod_tiling/tiling.c:1238 +#: ../mod_tiling/tiling.c:1249 msgid "The status display is not a valid parameter for this routine." msgstr "Stavový displej není v této rutinì platným parametrem." -#: ../mod_tiling/tiling.c:1329 +#: ../mod_tiling/tiling.c:1340 msgid "Refusing to float split directly containing the status display." msgstr "Odmítám rozdìlit pøímo prvek obsahující stavový displej." -#: ../mod_tiling/tiling.c:1392 +#: ../mod_tiling/tiling.c:1403 msgid "No suitable split here." msgstr "®ádné vhodné rozdìlení." # -#: ../mod_tiling/tiling.c:1428 +#: ../mod_tiling/tiling.c:1439 msgid "Could not get split tree." msgstr "Nemohu získat strom rozdìlení" -#: ../mod_tiling/tiling.c:1449 +#: ../mod_tiling/tiling.c:1460 msgid "Workspace already has a status display node." msgstr "Pracovní plocha ji¾ obsahuje stavový displej." # -#: ../mod_tiling/tiling.c:1487 +#: ../mod_tiling/tiling.c:1498 msgid "Missing region parameters." msgstr "Chybìjící parametry oblasti." -#: ../mod_tiling/tiling.c:1531 ../mod_tiling/splitfloat.c:780 +#: ../mod_tiling/tiling.c:1542 ../mod_tiling/splitfloat.c:780 msgid "Invalid direction." msgstr "Neplatný smìr." # -#: ../mod_tiling/tiling.c:1606 +#: ../mod_tiling/tiling.c:1617 msgid "No split type given." msgstr "Nebyl zadán typ rozdìlení." -#: ../mod_tiling/tiling.c:1619 +#: ../mod_tiling/tiling.c:1630 msgid "Unknown split type." msgstr "Neznámý typ rozdìlení." # # -#: ../mod_tiling/tiling.c:1659 +#: ../mod_tiling/tiling.c:1670 msgid "The workspace is empty." msgstr "Pracovní plocha je prázdná." -#: ../mod_tiling/placement.c:106 +#: ../mod_tiling/placement.c:104 #, c-format msgid "" "Ooops... could not find a region to attach client window to on workspace %s." @@ -569,15 +561,15 @@ msgid "REGION_RQGEOM_TRYONLY unsupported for status display." msgstr "REGION_RQGEOM_TRYONLY není stavovým displejem podporován." # -#: ../mod_tiling/split.c:1082 +#: ../mod_tiling/split.c:1083 msgid "Splitting the status display is not allowed." msgstr "Rozdìlení stavového displeje není povoleno." -#: ../mod_tiling/split.c:1113 ../mod_tiling/splitfloat.c:903 +#: ../mod_tiling/split.c:1114 ../mod_tiling/splitfloat.c:903 msgid "Unable to split: not enough free space." msgstr "Nelze rozdìlit: nedostatek volného místa." -#: ../mod_tiling/split.c:1864 +#: ../mod_tiling/split.c:1865 #, c-format msgid "Unable to get configuration for %s." msgstr "Nemohu získat nastavení pro %s." @@ -590,33 +582,33 @@ msgstr "Stavov msgid "Status display badly located in split tree." msgstr "Stavový øádek je ve stromu rozdìlení umístìn na ¹patném místì." -#: ../mod_tiling/ops.c:28 -msgid "Already detached" -msgstr "Ji¾ je odpojen" - -#: ../mod_tiling/ops.c:142 +#: ../mod_tiling/ops.c:72 ../mod_tiling/ops.c:120 msgid "Not member of a group" msgstr "Není èlenem skupiny" -#: ../mod_tiling/ops.c:147 +#: ../mod_tiling/ops.c:77 msgid "Manager group already has bottom" -msgstr "Øídící skupina ji¾ je na dnì" +msgstr "Øídící skupina ji¾ má dno" + +#: ../mod_tiling/ops.c:154 +msgid "Unable to move a region from tiling to group." +msgstr "Nemohu pøesunout regiion z dlá¾dìní do skupiny." -#: ../mod_query/wedln.c:777 +#: ../mod_query/wedln.c:813 msgid "history" msgstr "historie" -#: ../mod_query/fwarn.c:34 +#: ../mod_query/fwarn.c:35 msgid "Error:\n" msgstr "Chyba:\n" # -#: ../mod_menu/menu.c:537 +#: ../mod_menu/menu.c:601 msgid "Empty menu." msgstr "Prázdné menu." # -#: ../mod_sm/sm.c:110 +#: ../mod_sm/sm.c:111 msgid "Failed to set session directory." msgstr "Selhalo nastavení adresáøe s relací." @@ -646,7 +638,7 @@ msgstr "Spr msgid "Unable to connect to the session manager." msgstr "Nemohu se pøipojit ke správci sezení." -#: ../mod_sp/main.c:85 +#: ../mod_sp/main.c:126 msgid "Unable to create scratchpad." msgstr "Nemohu vytvoøit poznámkový blok." @@ -654,53 +646,54 @@ msgstr "Nemohu vytvo msgid "reading a pipe" msgstr "ètu rouru" -#: ../mod_statusbar/main.c:97 -msgid "ion-statusd launch timeout." -msgstr "Èas spou¹tìní ion-statusd vypr¹el." - -#: ../mod_statusbar/main.c:160 +#: ../mod_statusbar/main.c:159 msgid "ion-statusd timed out." msgstr "Èas ion-statusd vypr¹el." -#: ../mod_statusbar/statusbar.c:1046 +#: ../mod_statusbar/statusbar.c:1081 #, c-format msgid "[ %date || load: %load ] %filler%systray" msgstr "[ %date || vytí¾ení: %load ] %filler%systray" -#: ../de/init.c:42 +#: ../de/init.c:68 #, c-format msgid "Border attribute %s sanity check failed." msgstr "Selhala kontrola atributu okraje %s." -#: ../de/init.c:65 +#: ../de/init.c:91 #, c-format msgid "Unknown border style \"%s\"." msgstr "Neznámý styl okraje \"%s\"." -#: ../de/init.c:97 +#: ../de/init.c:111 +#, c-format +msgid "Unknown border side configuration \"%s\"." +msgstr "Neznámé nastavení okraje \"%s\"." + +#: ../de/init.c:144 #, c-format msgid "Unable to allocate colour \"%s\"." msgstr "Nemohu alokovat barvu \"%s\"." -#: ../de/init.c:160 +#: ../de/init.c:210 #, c-format msgid "Corrupt substyle table %d." msgstr "Poru¹ená tabulka stylù %d." -#: ../de/init.c:193 +#: ../de/init.c:243 #, c-format msgid "Unknown text alignment \"%s\"." msgstr "Neznámý textový prvek \"%s\"." -#: ../de/init.c:263 +#: ../de/init.c:319 #, c-format msgid "'based_on' for %s points back to the style itself." msgstr "Èást 'based_on' stylu %s ukazuje sama na sebe." -#: ../de/init.c:266 +#: ../de/init.c:322 #, c-format -msgid "Unknown base style \"%s\"." -msgstr "Neznámý základní styl \"%s\"." +msgid "Unknown base style. \"%s\"" +msgstr "Neznámý základní styl. \"%s\"" #: ../de/font.c:47 #, c-format @@ -722,8 +715,8 @@ msgstr "Nahr #: ../de/style.c:315 #, c-format -msgid "Style %s still in use [%d] but the module is being unloaded!" -msgstr "Styl %s se stále pou¾ívá [%d], ale modul se ji¾ ru¹í z pamìti!" +msgid "Style is still in use [%d] but the module is being unloaded!" +msgstr "Styl se stále pou¾ívá [%d], ale modul se ji¾ ru¹í z pamìti!" #: ../ion/ion.c:42 ../pwm/pwm.c:42 msgid "X display to use" @@ -738,52 +731,44 @@ msgid "Add directory to search path" msgstr "Pøidá adresáø do prohledávané cesty" #: ../ion/ion.c:51 ../pwm/pwm.c:51 -msgid "Manage default root window/non-Xinerama screen only" -msgstr "Spravuje pouze implicitní koøenové okno/obrazovku bez Xineramy" - -#: ../ion/ion.c:55 -msgid "Use Xinerama screen information (default: 1/yes)" -msgstr "Pou¾ít Xineramu (implicitnì: 1/ano)" +msgid "Manage default screen only" +msgstr "Spravuje pouze výchozí obrazovku" -#: ../ion/ion.c:58 ../pwm/pwm.c:58 -msgid "Ignored: not compiled with Xinerama support" -msgstr "Ignorováno: program je sestaven bez podpory Xineramy" - -#: ../ion/ion.c:62 ../pwm/pwm.c:62 +#: ../ion/ion.c:54 ../pwm/pwm.c:54 msgid "Name of session (affects savefiles)" msgstr "Jméno sezení (ovlivní místo ulo¾ení)" -#: ../ion/ion.c:65 ../pwm/pwm.c:65 +#: ../ion/ion.c:57 ../pwm/pwm.c:57 msgid "Session manager client ID" msgstr "Klientské ID správce sezení" -#: ../ion/ion.c:68 ../pwm/pwm.c:68 +#: ../ion/ion.c:60 ../pwm/pwm.c:60 msgid "Do not create startup error log and display it with xmessage." msgstr "" "Nevytváøet záznam o chybách pøi startu a nezobrazovat jej pomocí xmessage." -#: ../ion/ion.c:72 ../pwm/pwm.c:72 +#: ../ion/ion.c:64 ../pwm/pwm.c:64 msgid "Show this help" msgstr "Zobrazí tuto nápovìdu" -#: ../ion/ion.c:75 ../pwm/pwm.c:75 +#: ../ion/ion.c:67 ../pwm/pwm.c:67 msgid "Show program version" msgstr "Zobrazí verzi programu" -#: ../ion/ion.c:78 ../pwm/pwm.c:78 +#: ../ion/ion.c:70 ../pwm/pwm.c:70 msgid "Show about text" msgstr "Zobrazí nìco o programu" -#: ../ion/ion.c:93 +#: ../ion/ion.c:85 msgid "Could not get user configuration file directory." msgstr "Nemohu získat u¾ivatelùv adresáø s nastavením." -#: ../ion/ion.c:107 +#: ../ion/ion.c:99 #, c-format msgid "%s/welcome.txt" msgstr "%s/welcome.cs.txt" -#: ../ion/ion.c:140 ../pwm/pwm.c:87 +#: ../ion/ion.c:132 ../pwm/pwm.c:79 #, c-format msgid "" "Usage: %s [options]\n" @@ -792,28 +777,20 @@ msgstr "" "Pou¾ití: %s [volby]\n" "\n" -#: ../ion/ion.c:200 ../pwm/pwm.c:150 -msgid "Invalid parameter to -xinerama." -msgstr "Neplatný parametr pro -xinerama." - # -#: ../ion/ion.c:219 ../pwm/pwm.c:169 +#: ../ion/ion.c:200 ../pwm/pwm.c:150 msgid "Invalid command line." msgstr "Neplatná pøíkazová øádka." -#: ../ion/ion.c:241 +#: ../ion/ion.c:222 msgid "Ion startup error log:\n" msgstr "Záznam chyb pøi startu Ionu:\n" -#: ../ion/ion.c:252 ../pwm/pwm.c:202 +#: ../ion/ion.c:233 ../pwm/pwm.c:183 msgid "Refusing to start due to encountered errors." msgstr "Odmítám se spustit kvùli zaznamenaným chybám." -#: ../pwm/pwm.c:55 -msgid "Use Xinerama screen information (default: 0/no)" -msgstr "Pou¾ít Xineramu (implicitnì: 0/ne) " - -#: ../pwm/pwm.c:191 +#: ../pwm/pwm.c:172 msgid "PWM startup error log:\n" msgstr "Záznam chyb pøi startu PWM:\n" @@ -927,16 +904,16 @@ msgid "" msgstr "Funkce '%s' má víc parametrù, ne¾ lze zpracovat obsluhou v 1. úrovni" # -#: ../libextl/luaextl.c:2373 +#: ../libextl/luaextl.c:2347 msgid "Maximal serialisation depth reached." msgstr "Dosa¾ena maximální hloubka serializace." -#: ../libextl/luaextl.c:2394 +#: ../libextl/luaextl.c:2368 #, c-format msgid "Unable to serialise type %s." msgstr "Nemohu serializovat typ %s." -#: ../libextl/luaextl.c:2425 +#: ../libextl/luaextl.c:2399 msgid "-- This file has been generated by Ion. Do not edit.\n" msgstr "-- Tento soubor byl vytvoøen Ionem. Neupravujte jej.\n" @@ -949,305 +926,296 @@ msgstr "" "Kontrola typu selhala ve druhé úrovni obsluhy volání pro parametr %d " "(obdr¾el %s, oèekával %s)." -msgid "Grow-D" -msgstr "Rùst dolù" +msgid "Scroll the message or completions up/down." +msgstr "Roluje zprávu nebo seznam dokonèení nahoru/dolù." -msgid "Grow-U" -msgstr "Rùst nahoru" +msgid "Close the query/message box, not executing bound actions." +msgstr "Zavøe okno s dotazem/zprávou, ani¾ by se spustily svázané akce.." -msgid "Grow-R" -msgstr "Rùst vpravo" +msgid "Close the query and execute bound action." +msgstr "Zavøe dotaz a spustí svázanou akci." -msgid "Grow-L" -msgstr "Rùst vlevo" +msgid "Complete from history" +msgstr "Doplní z historie." -msgid "Pos-BR" -msgstr "Pozice PD" +msgid "Try to complete the entered text or cycle through completions." +msgstr "Zkusí doplnit zadaný text nebo bude cyklovat mezi mo¾nostmi." -msgid "Pos-BL" -msgstr "Pozice LD" +# +msgid "Clear mark/cancel selection." +msgstr "Sma¾e znaèku/zru¹í výbìr." -msgid "Pos-TR" -msgstr "Pozice PH" +# +msgid "Copy selection." +msgstr "Zkopíruje výbìr." -msgid "Pos-TL" -msgstr "Pozice LH" +# +msgid "Cut selection." +msgstr "Vyjme výbìr." -msgid "Toggle floating dock." -msgstr "Zapne plovoucí dok." +# +msgid "Set mark/begin selection." +msgstr "Nastaví znaèku/zaèátek výbìru." -msgid "Clear the menu's typeahead find buffer." -msgstr "Vyma¾e buffer pro dopøedné hledání v menu." +msgid "Paste from the clipboard." +msgstr "Vlo¾í ze schránky." -msgid "Select next/previous menu entry." -msgstr "V menu vybere dal¹í/pøedchozí polo¾ku." +msgid "Select next/previous (matching) history entry." +msgstr "Vybere dal¹í/pøedchozí (odpovídající) polo¾ku historie." -# -# -msgid "Activate current menu entry." -msgstr "Aktivuje vybranou polo¾ku v menu." +msgid "Transpose characters." +msgstr "Transponuje znaky." -msgid "Close the menu." -msgstr "Zavøe menu." +msgid "Delete the whole line." +msgstr "Sma¾e celý øádek." -msgid "New tiling" -msgstr "Vytvoøit dla¾dice" +msgid "Delete to end of line." +msgstr "Sma¾e text do konce øádky." -msgid "Detach" -msgstr "Odpojit" +msgid "Delete one word forward/backward." +msgstr "Sma¾e slovo pøed/za kurzorem." -msgid "Transpose" -msgstr "Transponovat" +msgid "Delete previous character." +msgstr "Sma¾e pøedchozí znak." -msgid "Flip" -msgstr "Obrátit" +msgid "Delete next character." +msgstr "Sma¾e následující znak." -msgid "Split horizontally" -msgstr "Rozdìlit horizontálnì" +msgid "Skip one word forward/backward." +msgstr "Pøeskoèí slovo dopøedu/dozadu." -msgid "Split vertically" -msgstr "Rozdìlit vertikálnì" +msgid "Go to end/beginning." +msgstr "Skoèí na konec/zaèátek." -msgid "At root" -msgstr "Na koøenu" +msgid "Move one character forward/backward." +msgstr "Posune se o znak vpøed/vzad." -msgid "Below" -msgstr "Dole" +msgid "Kill" +msgstr "Ukonèit" -msgid "Above" -msgstr "Nahoøe" +msgid "Attach tagged" +msgstr "Pøipojit oznaèené" -msgid "At right" -msgstr "Vpravo" +msgid "Rename" +msgstr "Pøejmenovat" -msgid "At left" -msgstr "Vlevo" +msgid "Close" +msgstr "Zavøít" -msgid "Float split" -msgstr "Plovoucí okraj" +msgid "De/reattach" +msgstr "Od/pøipojit" -msgid "Destroy frame" -msgstr "Znièit rám" +msgid "Toggle tag" +msgstr "(Od)znaèit" -msgid "Tile frame, if no tiling exists on the workspace" -msgstr "" -"Zmìní rám na dla¾dice (pokud zatím dla¾dice na pracovní plo¹e neexistují)." +msgid "Window info" +msgstr "Informace o oknì" -msgid "Detach window from tiled frame" -msgstr "Odpojí okno od dla¾dicového rámu" +msgid "Clear tags" +msgstr "Vyèistit znaèky" -msgid "Destroy current frame." -msgstr "Znièí aktuální rám." +msgid "Exit" +msgstr "Ukonèit" -msgid "Split current frame horizontally." -msgstr "Rozdìlí rám horizontálnì." +msgid "Restart TWM" +msgstr "Restartovat TWM" -msgid "Go to frame above/below/right/left of current frame." -msgstr "Pøejde do rámu nad/pod/vpravo/vlevo od aktuálního rámu." +msgid "Restart" +msgstr "Restartovat" -msgid "Split current frame vertically." -msgstr "Rozdìlí rám vertikálnì." +msgid "Save" +msgstr "Ulo¾it" -msgid "Failed to create statusbar." -msgstr "Selhalo vytvoøení stavového øádku." +msgid "Session" +msgstr "Sezení" -msgid "Screen already has an stdisp. Refusing to create a statusbar." -msgstr "Obrazovka ji¾ obsahuje stdisp. Odmítám vytvoøit stavový øádek." +msgid "Styles" +msgstr "Styly" -msgid "Screen not found." -msgstr "Obrazovka nebyla nalezna." +msgid "About Ion" +msgstr "O Ionu" -msgid "Failed to start ion-statusd." -msgstr "Selhalo spu¹tìní ion-statusd." +msgid "Help" +msgstr "Nápovìda" -msgid "Errors starting ion-statusd:\n" -msgstr "Chyba pøi startu ion-statusd:\n" +msgid "Lock screen" +msgstr "Zamknout obrazovku" -msgid "Could not find %s" -msgstr "Nemohu najít %s" +msgid "Terminal" +msgstr "Terminál" -msgid "ion-statusd quit." -msgstr "ion-statusd konèí." +# +msgid "Run..." +msgstr "Spustit..." -msgid "Not a directory." -msgstr "Není adresáøem." +# +msgid "Move in specified direction." +msgstr "Posune se v zadaném smìru." -msgid "Invalid command" -msgstr "Neplatný pøíkaz" +msgid "Shrink in specified direction." +msgstr "Zmen¹uje v zadaném smìru." -msgid "Error in command string: " -msgstr "Chyba v pøíkazu: " +# +msgid "Grow in specified direction." +msgstr "Roste v zadaném smìru." -msgid "Error compiling guard: %s" -msgstr "Chyba pøi sestavení strá¾ce: %s" +msgid "End the resize mode." +msgstr "Ukonèí re¾im zmìny velikosti." -msgid "Invalid guard %s." -msgstr "Neplatná ochrana %s." +msgid "Cancel the resize mode." +msgstr "Zru¹í re¾im zmìny velikosti." -msgid "Main menu:" -msgstr "Hlavní menu:" +msgid "Move the frame." +msgstr "Pøesune rám." -msgid "Context menu:" -msgstr "Kontextové menu:" +msgid "Lower the frame." +msgstr "Pøesune rám do pozadí" -msgid "Floating frame" -msgstr "Plovoucí rám" +# +msgid "Raise the frame." +msgstr "Pøesune rám do popøedí." -msgid "Tiled frame" -msgstr "Dla¾dicový rám" +msgid "Toggle shade mode" +msgstr "Pøepne stínový re¾im" -msgid "Tiling" -msgstr "Dla¾dice" +msgid "Attach tagged objects to this frame." +msgstr "Pøipojí oznaèené objekty k tomuto rámu." -# -msgid "Workspace" -msgstr "Pracovní plocha" +msgid "Maximize the frame horizontally/vertically." +msgstr "Maximalizuje rám horizontálnì/vertikálnì." -msgid "Screen" -msgstr "Obrazovka" +msgid "Move current object within the frame left/right." +msgstr "Pøesune objekt v rámu vlevo/vpravo." -msgid "Frame" -msgstr "Rám" +msgid "Switch to next/previous object within the frame." +msgstr "Pøepne se na dal¹í/pøedchozí objekt v rámu." -msgid "Recursive table - unable to deepcopy" -msgstr "Rekurzivní tabulka - nemohu provést hlubokou kopii" +msgid "Switch to n:th object within the frame." +msgstr "Pøepne se do n-tého objektu v rámu." -msgid "" -"Making the following minimal emergency mappings:\n" -" F2 -> xterm\n" -" F11 -> restart\n" -" F12 -> exit\n" -" Mod1+C -> close\n" -" Mod1+K P/N -> WFrame.switch_next/switch_prev\n" -msgstr "" -"Vytváøím nouzové pøiøazení kláves:\n" -" F2 -> xterm\n" -" F11 -> restart\n" -" F12 -> exit\n" -" Mod1+C -> close\n" -" Mod1+K P/N -> WFrame.switch_next/switch_prev\n" - -msgid "Unable to append to non-table menu" -msgstr "Nelze pøidat do netabulkového menu" - -msgid "Cannot save selection." -msgstr "Nemohu ulo¾it výbìr." - -msgid "Save look selection in %s?" -msgstr "Ulo¾it nastavení vzhledu do %s?" - -msgid "Too much result data" -msgstr "Pøíli¹ mnoho výsledkù" - -msgid "Could not find client window %s." -msgstr "Nemohu najít klientské okno %s." +# +msgid "Query for a client window to attach." +msgstr "Dotá¾e se na klientské okno, které má pøipojit." -msgid "Cannot attach: different root windows." -msgstr "Nemohu pøipojit: rùzná koøenová okna." +msgid "Move objects between frames by dragging and dropping the tab." +msgstr "Pøesune objekty mezi rámy pomocí ta¾ení za zálo¾ku." -msgid "Unknown error" -msgstr "Neznámá chyba" +msgid "Resize the frame." +msgstr "Zmìní velikost rámu." -msgid "Go to window:" -msgstr "Jít do okna:" +msgid "Switch the frame to display the object indicated by the tab." +msgstr "Pøepne rám, aby zobrazoval objekt urèený zálo¾kou." -msgid "Attach window:" -msgstr "Pøipojit okno:" +msgid "Begin move/resize mode." +msgstr "Zahájí re¾im pøesunu/zmìny velikosti." -msgid "Go to or create workspace:" -msgstr "Vytvoøit nebo pøejít na pracovní plochu:" +msgid "Display context menu." +msgstr "Zobrazí kontextové menu." -msgid "Exit Ion/Shutdown session (y/n)?" -msgstr "Ukonèit Ion/ukonèit sezení (y/n)?" +# +msgid "Query for a client window to go to." +msgstr "Dotá¾e se na klientské okno, do nìho¾ má pøejít." -msgid "Restart Ion (y/n)?" -msgstr "Restartovat Ion (y/n)?" +msgid "Query for workspace to go to or create a new one." +msgstr "Zeptá se na pracovní plochu, na kterou má pøejít, nebo ji vytvoøit." -msgid "Frame name:" -msgstr "Název rámu:" +msgid "Query for file to view." +msgstr "Zeptá se na soubor, který chcete zobrazit." -msgid "Workspace name:" -msgstr "Název pracovní plochy:" +msgid "Query for file to edit." +msgstr "Zeptá se na soubor, který chcete upravit." -msgid "Edit file:" -msgstr "Upravit soubor:" +msgid "Query for host to connect to with SSH." +msgstr "Zeptá se na jméno poèítaèe, ke kterému se má pøipojit pomocí SSH." -msgid "View file:" -msgstr "Prohlédnout soubor:" +msgid "Query for Lua code to execute." +msgstr "Zeptá se na lua kód, který má vykonat." -msgid "Run:" -msgstr "Spustit:" +msgid "Query for command line to execute." +msgstr "Zeptá se na pøíkaz, který má spustit." -msgid "Failed to open ~/.ssh/known_hosts" -msgstr "Selhalo otevøení ~/.ssh/known_hosts" +# +msgid "Run a terminal emulator." +msgstr "Spustí emulátor terminálu." -msgid "Failed to open ~/.ssh/config" -msgstr "Selhalo otevøení ~/.ssh/config" +msgid "Show the Ion manual page." +msgstr "Zobrazí manuálovou stránku Ionu." -msgid "SSH to:" -msgstr "SSH na:" +msgid "Query for manual page to be displayed." +msgstr "Zeptá se na manuálovou stánku, kterou má zobrazit." -msgid "Manual page (%s):" -msgstr "Manuálová stránka (%s):" +msgid "Toggle tag of current object." +msgstr "Pøepne oznaèení aktuálního objektu." -msgid "Lua code:" -msgstr "Lua kód:" +msgid "Detach (float) or reattach an object to its previous location." +msgstr "Odpojí nebo znovu pøipojí objekt z/do pùvodního umístìní." -msgid "Unknown menu %s." -msgstr "Neznámé menu %s." +msgid "Close current object." +msgstr "Zavøe aktuální objekt." -msgid "Missing submenu " -msgstr "Chybìjící podmenu" +msgid "Toggle client window group full-screen mode" +msgstr "Pøepne skupinu klientského okna do celoobrazovkového re¾imu." -msgid "%s:" -msgstr "%s:" +# +msgid "" +"Send next key press to the client window. Some programs may not allow this " +"by default." +msgstr "" +"Po¹le následující stisk klávesy klientskému oknu. Nìkteré programy to " +"implicitnì nepovolují." -msgid "No entry '%s'" -msgstr "®ádný záznam '%s'" +# +msgid "Kill client owning the client window." +msgstr "Ukonèí klienta vlastnícího klientské okno." +# msgid "" -"\n" -"%sClass: %s\n" -"%sRole: %s\n" -"%sInstance: %s\n" -"%sXID: 0x%x" +"Nudge the client window. This might help with some programs' resizing " +"problems." msgstr "" -"\n" -"%sTøída: %s\n" -"%sRole: %s\n" -"%sInstance: %s\n" -"%sXID: 0x%x" +"Postrèí klientské okno. To mù¾e pomoci nìkterým programùm, které mají " +"problémy se zmìnou velikosti." -msgid "Toggle scratchpad." -msgstr "Zapne poznámkový blok." +msgid "Raise focused object, if possible." +msgstr "Pokud je to mo¾né, pøesune zamìøený objekt nahoru." -msgid "Programs" -msgstr "Programy" +msgid "Backward-circulate focus." +msgstr "Cykluje vzad." -msgid "Lock screen" -msgstr "Zamknout obrazovku" +msgid "Forward-circulate focus." +msgstr "Cykluje vpøed." -msgid "Help" -msgstr "Nápovìda" +msgid "Display the window list menu." +msgstr "Zobrazí menu se seznamem oken." + +msgid "Display the main menu." +msgstr "Zobrazí hlavní menu." # -msgid "Workspaces" -msgstr "Pracovní plochy" +# +msgid "Create a new workspace of chosen default type." +msgstr "Vytvoøí novou pracovní plochu vybraného typu." -msgid "New" -msgstr "Nový" +# +msgid "Go to next/previous screen on multihead setup." +msgstr "Ve víceobrazovkovém nastavení pøejde na dal¹í/pøedchozí obrazovku." -msgid "Styles" -msgstr "Styly" +# +msgid "Go to n:th screen on multihead setup." +msgstr "U víceobrazovkového nastavení pøejde na n-tou obrazovku." -msgid "Session" -msgstr "Sezení" +# +msgid "Clear all tags." +msgstr "Vyèistí v¹echny znaèky." -msgid "Close" -msgstr "Zavøít" +msgid "Go to first region demanding attention or previously active one." +msgstr "" +"Pøejde do prvního regionu vy¾adujícího pozornost nebo do pøedchozího " +"aktivního." -msgid "List" -msgstr "Seznam" +# +msgid "Switch to next/previous object within current screen." +msgstr "Pøepne se na dal¹í/pøedchozí objekt v aktuální obrazovce." # msgid "" @@ -1257,301 +1225,317 @@ msgstr "" "Pøepne se na n-tý objekt (pracovní plochu, celoobrazovkové okno) na aktuální " "obrazovce." -# -msgid "Switch to next/previous object within current screen." -msgstr "Pøepne se na dal¹í/pøedchozí objekt v aktuální obrazovce." +msgid "List" +msgstr "Seznam" -msgid "Go to first region demanding attention or previously active one." -msgstr "" -"Pøejde do prvního regionu vy¾adujícího pozornost nebo do pøedchozího " -"aktivního." +msgid "New" +msgstr "Nový" -# -msgid "Clear all tags." -msgstr "Vyèistí v¹echny znaèky." +msgid "Dillo" +msgstr "Dillo" -# -msgid "Go to n:th screen on multihead setup." -msgstr "U víceobrazovkového nastavení pøejde na n-tou obrazovku." +msgid "Konqueror" +msgstr "Konqueror" -# -msgid "Go to next/previous screen on multihead setup." -msgstr "Ve víceobrazovkovém nastavení pøejde na dal¹í/pøedchozí obrazovku." +msgid "Links" +msgstr "Links" -# -# -msgid "Create a new workspace of chosen default type." -msgstr "Vytvoøí novou pracovní plochu vybraného typu." +msgid "Opera" +msgstr "Opera" -msgid "Display the main menu." -msgstr "Zobrazí hlavní menu." +msgid "Rxvt" +msgstr "Rxvt" -msgid "Display the window list menu." -msgstr "Zobrazí menu se seznamem oken." +msgid "W3M" +msgstr "W3M" -msgid "Forward-circulate focus." -msgstr "Cykluje vpøed." +msgid "XTerm" +msgstr "XTerm" -msgid "Backward-circulate focus." -msgstr "Cykluje vzad." +# +msgid "Workspaces" +msgstr "Pracovní plochy" -msgid "Raise focused object, if possible." -msgstr "Pokud je to mo¾né, pøesune zamìøený objekt nahoru." +msgid "Programs" +msgstr "Programy" -# -msgid "" -"Nudge the client window. This might help with some programs' resizing " -"problems." -msgstr "" -"Postrèí klientské okno. To mù¾e pomoci nìkterým programùm, které mají " -"problémy se zmìnou velikosti." +msgid "Show the PWM manual page." +msgstr "Zobrazí manuálovou stránku PWM." -# -msgid "Kill client owning the client window." -msgstr "Ukonèí klienta vlastnícího klientské okno." +msgid "Toggle scratchpad." +msgstr "Zapne poznámkový blok." -# msgid "" -"Send next key press to the client window. Some programs may not allow this " -"by default." +"\n" +"%sClass: %s\n" +"%sRole: %s\n" +"%sInstance: %s\n" +"%sXID: 0x%x" msgstr "" -"Po¹le následující stisk klávesy klientskému oknu. Nìkteré programy to " -"implicitnì nepovolují." +"\n" +"%sTøída: %s\n" +"%sRole: %s\n" +"%sInstance: %s\n" +"%sXID: 0x%x" -msgid "Toggle client window group full-screen mode" -msgstr "Pøepne skupinu klientského okna do celoobrazovkového re¾imu." +msgid "No entry '%s'" +msgstr "®ádný záznam '%s'" -msgid "Close current object." -msgstr "Zavøe aktuální objekt." +msgid "%s:" +msgstr "%s:" -msgid "Query for manual page to be displayed." -msgstr "Zeptá se na manuálovou stánku, kterou má zobrazit." +msgid "Missing submenu " +msgstr "Chybìjící podmenu" -msgid "Show the Ion manual page." -msgstr "Zobrazí manuálovou stránku Ionu." +msgid "Unknown menu %s." +msgstr "Neznámé menu %s." -# -msgid "Run a terminal emulator." -msgstr "Spustí emulátor terminálu." +msgid "Lua code:" +msgstr "Lua kód:" -msgid "Query for command line to execute." -msgstr "Zeptá se na pøíkaz, který má spustit." +msgid "Manual page (%s):" +msgstr "Manuálová stránka (%s):" -msgid "Query for Lua code to execute." -msgstr "Zeptá se na lua kód, který má vykonat." +msgid "SSH to:" +msgstr "SSH na:" -msgid "Query for host to connect to with SSH." -msgstr "Zeptá se na jméno poèítaèe, ke kterému se má pøipojit pomocí SSH." +msgid "Failed to open ~/.ssh/config" +msgstr "Selhalo otevøení ~/.ssh/config" -msgid "Query for file to edit." -msgstr "Zeptá se na soubor, který chcete upravit." +msgid "Failed to open ~/.ssh/known_hosts" +msgstr "Selhalo otevøení ~/.ssh/known_hosts" -msgid "Query for file to view." -msgstr "Zeptá se na soubor, který chcete zobrazit." +msgid "Run:" +msgstr "Spustit:" -msgid "Query for workspace to go to or create a new one." -msgstr "Zeptá se na pracovní plochu, na kterou má pøejít, nebo ji vytvoøit." +msgid "View file:" +msgstr "Prohlédnout soubor:" -# -msgid "Query for a client window to go to." -msgstr "Dotá¾e se na klientské okno, do nìho¾ má pøejít." +msgid "Edit file:" +msgstr "Upravit soubor:" -# -msgid "Query for a client window to attach." -msgstr "Dotá¾e se na klientské okno, které má pøipojit." +msgid "Workspace name:" +msgstr "Název pracovní plochy:" -msgid "Display context menu." -msgstr "Zobrazí kontextové menu." +msgid "Frame name:" +msgstr "Název rámu:" -msgid "Maximize the frame horizontally/vertically." -msgstr "Maximalizuje rám horizontálnì/vertikálnì." +msgid "Restart Ion (y/n)?" +msgstr "Restartovat Ion (y/n)?" -msgid "Begin move/resize mode." -msgstr "Zahájí re¾im pøesunu/zmìny velikosti." +msgid "Exit Ion/Shutdown session (y/n)?" +msgstr "Ukonèit Ion/ukonèit sezení (y/n)?" -msgid "Switch the frame to display the object indicated by the tab." -msgstr "Pøepne rám, aby zobrazoval objekt urèený zálo¾kou." +msgid "Go to or create workspace:" +msgstr "Vytvoøit nebo pøejít na pracovní plochu:" -msgid "Resize the frame." -msgstr "Zmìní velikost rámu." +msgid "Attach window:" +msgstr "Pøipojit okno:" -msgid "Move the frame." -msgstr "Pøesune rám." +msgid "Go to window:" +msgstr "Jít do okna:" -msgid "Move objects between frames by dragging and dropping the tab." -msgstr "Pøesune objekty mezi rámy pomocí ta¾ení za zálo¾ku." +msgid "New workspace layout (default):" +msgstr "Rozlo¾ení nové pracovní plochy (default):" + +msgid "Unknown error" +msgstr "Neznámá chyba" + +msgid "Unknown layout" +msgstr "Neznámé rozlo¾ení." + +msgid "Cannot attach: different root windows." +msgstr "Nemohu pøipojit: rùzná koøenová okna." -msgid "Tag current object within the frame." -msgstr "Oznaèí aktuální objekt v rámu." +msgid "Could not find client window %s." +msgstr "Nemohu najít klientské okno %s." + +msgid "Too much result data" +msgstr "Pøíli¹ mnoho výsledkù" -msgid "Switch to n:th object within the frame." -msgstr "Pøepne se do n-tého objektu v rámu." +msgid "Could not find %s" +msgstr "Nemohu najít %s" -msgid "Switch to next/previous object within the frame." -msgstr "Pøepne se na dal¹í/pøedchozí objekt v rámu." +msgid "Not a directory." +msgstr "Není adresáøem." -msgid "Move current object within the frame left/right." -msgstr "Pøesune objekt v rámu vlevo/vpravo." +msgid "Invalid command" +msgstr "Neplatný pøíkaz" -msgid "Attach tagged objects to this frame." -msgstr "Pøipojí oznaèené objekty k tomuto rámu." +msgid "Error in command string: " +msgstr "Chyba v pøíkazu: " -msgid "Toggle shade mode" -msgstr "Pøepne stínový re¾im" +msgid "Error compiling guard: %s" +msgstr "Chyba pøi sestavení strá¾ce: %s" -# -msgid "Raise the frame." -msgstr "Pøesune rám do popøedí." +msgid "Invalid guard %s." +msgstr "Neplatná ochrana %s." -msgid "Lower the frame." -msgstr "Pøesune rám do pozadí" +msgid "Main menu:" +msgstr "Hlavní menu:" -msgid "Cancel the resize mode." -msgstr "Zru¹í re¾im zmìny velikosti." +msgid "Context menu:" +msgstr "Kontextové menu:" -msgid "End the resize mode." -msgstr "Ukonèí re¾im zmìny velikosti." +msgid "Floating frame" +msgstr "Plovoucí rám" -# -msgid "Grow in specified direction." -msgstr "Roste v zadaném smìru." +msgid "Tiled frame" +msgstr "Dla¾dicový rám" -msgid "Shrink in specified direction." -msgstr "Zmen¹uje v zadaném smìru." +msgid "Tiling" +msgstr "Dla¾dice" # -msgid "Move in specified direction." -msgstr "Posune se v zadaném smìru." +msgid "Workspace" +msgstr "Pracovní plocha" -msgid "About Ion" -msgstr "O Ionu" +msgid "Screen" +msgstr "Obrazovka" -msgid "XTerm" -msgstr "XTerm" +msgid "Frame" +msgstr "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" @@ -1571,6 +1555,72 @@ msgstr "%s %s" msgid "%s %s at %s" msgstr "%s %s na %s" +#~ msgid "Tag current object within the frame." +#~ msgstr "Oznaèí aktuální objekt v rámu." + +#~ msgid "Xinerama sanity check failed; overlapping screens detected." +#~ msgstr "Kontrola Xineramy selhala: byly nalezeny pøekrývající se obrazovky." + +#~ msgid "Xinerama sanity check failed; zero size detected." +#~ msgstr "Kontrola Xineramy selhala: byla nalezena nulová velikost." + +#~ msgid "" +#~ "Don't know how to get Xinerama information for multiple X root windows." +#~ msgstr "Nevím, jak zpracovat informace z Xineramy pro více koøenových oken." + +#~ msgid "Error retrieving Xinerama information." +#~ msgstr "Chyba pøi získávání informaci z Xineramy." + +#~ msgid "Unable to setup Xinerama screen %d." +#~ msgstr "Nemohu nastavit obrazovku Xineramy %d." + +#~ msgid "Unable to setup X screen %d." +#~ msgstr "Nemohu nastavit X obrazovku %d." + +#~ msgid "Refusing to destroy - not empty." +#~ msgstr "Odmítám zru¹it - není prázdné." + +#~ msgid "Workspace not empty - refusing to destroy." +#~ msgstr "Pracovní plocha není prázdná - odmítám zru¹it." + +#~ msgid "Nil frame." +#~ msgstr "Prázdný rám." + +#~ msgid "The frame is not managed by the workspace." +#~ msgstr "Rám není spravován pracovní plochou." + +#~ msgid "Already detached" +#~ msgstr "Ji¾ je odpojen" + +#~ msgid "ion-statusd launch timeout." +#~ msgstr "Èas spou¹tìní ion-statusd vypr¹el." + +#~ msgid "Use Xinerama screen information (default: 1/yes)" +#~ msgstr "Pou¾ít Xineramu (implicitnì: 1/ano)" + +#~ msgid "Ignored: not compiled with Xinerama support" +#~ msgstr "Ignorováno: program je sestaven bez podpory Xineramy" + +#~ msgid "Invalid parameter to -xinerama." +#~ msgstr "Neplatný parametr pro -xinerama." + +#~ msgid "Use Xinerama screen information (default: 0/no)" +#~ msgstr "Pou¾ít Xineramu (implicitnì: 0/ne) " + +#~ msgid "Detach window from tiled frame" +#~ msgstr "Odpojí okno od dla¾dicového rámu" + +# +#~ msgid "New workspace" +#~ msgstr "Nová pracovní plocha" + +#~ msgid "New empty workspace" +#~ msgstr "Nová prázdná pracovní plocha" + +# +#~ msgid "Close workspace" +#~ msgstr "Zavøít pracovní plochu" + #~ msgid "Unable to re-initialise workspace. Destroying." #~ msgstr "Nemohu znovu inicializovat pracovní plochu. Nièím." diff --git a/po/de.po b/po/de.po deleted file mode 100644 index a4f05ef..0000000 --- a/po/de.po +++ /dev/null @@ -1,1667 +0,0 @@ -# -# German language translations for Ion3. -# -# Copyright (c) Schott Robert 2005. -# -# This file is distributed under the same license as the Ion3 package. -# - -msgid "" -msgstr "" -"Project-Id-Version: Ion3\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2004-10-11 18:33+0300\n" -"PO-Revision-Date: 2005-02-13 23:50+0300\n" -"Last-Translator: Schott Robert \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" diff --git a/po/fi.po b/po/fi.po index 229dc45..f17a924 100644 --- a/po/fi.po +++ b/po/fi.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Ion3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-11-11 17:36+0200\n" +"POT-Creation-Date: 2007-04-22 13:13+0300\n" "PO-Revision-Date: 2004-07-31 23:50+0300\n" "Last-Translator: Tuomo Valkonen \n" "Language-Team: none\n" @@ -96,7 +96,7 @@ msgid "Time request from X server failed." msgstr "Ajan pyyntö X-palvelimelta epäonnistui." # -#: ../ioncore/exec.c:177 +#: ../ioncore/exec.c:186 msgid "Not saving state: running under session manager." msgstr "Tilaa ei talleteta, koska olemme istunnonhallinnan alaisia." @@ -152,38 +152,34 @@ msgstr "Ladattava moduulia ei ole annettu." msgid "Invalid arguments." msgstr "Virheelliset parametrit." -#: ../ioncore/screen.c:298 -msgid "act: " -msgstr "act: " - # -#: ../ioncore/screen.c:481 -msgid "Only workspace may not be destroyed." -msgstr "Ainoata työpöytää ei voi tuhota." +#: ../ioncore/screen.c:385 +msgid "Only workspace may not be destroyed/detached." +msgstr "Ainoata työpöytää ei voi tuhota/irroitaa." # -#: ../ioncore/screen.c:489 +#: ../ioncore/screen.c:396 msgid "Screens may not be destroyed." msgstr "Näyttöjä ei voi tuhota." -#: ../ioncore/screen.c:525 +#: ../ioncore/screen.c:432 msgid "Invalid offset." msgstr "Virheellinen poikkeama." -#: ../ioncore/screen.c:568 +#: ../ioncore/screen.c:471 #, c-format msgid "Unable to create a workspace on screen %d." msgstr "Työpöydän luonti ruudulle %d epäonnistui." -#: ../ioncore/sizehint.c:151 +#: ../ioncore/sizehint.c:157 msgid "Invalid client-supplied width/height increment." msgstr "Asiakkaan ilmoittama pysty/vaakalisäys koolle on virheellinen." -#: ../ioncore/sizehint.c:159 +#: ../ioncore/sizehint.c:165 msgid "Invalid client-supplied aspect-ratio." msgstr "Asiakkaan ilmoittama sivusuhde on virheellinen." -#: ../ioncore/ioncore.c:74 +#: ../ioncore/ioncore.c:78 msgid "" "This program is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU Lesser General Public\n" @@ -206,16 +202,16 @@ msgstr "" "hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen.\n" "Katso LGPL lisenssistä lisää yksityiskohtia.\n" -#: ../ioncore/ioncore.c:155 +#: ../ioncore/ioncore.c:159 msgid "No encoding given in LC_CTYPE." msgstr "LC_CTYPE ei kerro enkoodausta." -#: ../ioncore/ioncore.c:437 +#: ../ioncore/ioncore.c:470 #, c-format msgid "Could not connect to X display '%s'" msgstr "Yhteydenotto X-palvelimeen '%s' epäonnistui." -#: ../ioncore/ioncore.c:489 +#: ../ioncore/ioncore.c:522 msgid "Could not find a screen to manage." msgstr "Yhtään hallittavissa olevaa juuri-ikkunaa ei löytynyt." @@ -235,48 +231,48 @@ msgstr "Sy msgid "Failed to create input context." msgstr "Syöttökontekstin luonti epäonnistui." -#: ../ioncore/clientwin.c:411 +#: ../ioncore/clientwin.c:379 #, c-format msgid "The transient_for hint for \"%s\" points to itself." msgstr "Ikkunan \"%s\" transient_for neuvo osoittaa itseensä." -#: ../ioncore/clientwin.c:415 +#: ../ioncore/clientwin.c:383 #, c-format msgid "" "Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" " "multi-parent brain damage?)" msgstr "Ikkunan \"%s\" transient_for neuvo on rikki." -#: ../ioncore/clientwin.c:420 +#: ../ioncore/clientwin.c:388 #, c-format msgid "The transient_for window for \"%s\" is not on the same screen." msgstr "Ikkunan \"%s\" transient_for neuvo osoittaa eri näytölle." -#: ../ioncore/clientwin.c:440 ../ioncore/clientwin.c:527 -#: ../ioncore/clientwin.c:1300 +#: ../ioncore/clientwin.c:408 ../ioncore/clientwin.c:496 +#: ../ioncore/clientwin.c:1292 #, c-format msgid "Window %#x disappeared." msgstr "Ikkuna %#x katosi." -#: ../ioncore/clientwin.c:547 +#: ../ioncore/clientwin.c:516 msgid "Unable to find a matching root window!" msgstr "Vastaavaa juuri-ikkunaa ei löytynyt." -#: ../ioncore/clientwin.c:582 +#: ../ioncore/clientwin.c:555 #, c-format msgid "Unable to manage client window %#x." msgstr "Asiakasikkunan %x hallittavaksi saattaminen epäonnistui." -#: ../ioncore/clientwin.c:633 +#: ../ioncore/clientwin.c:604 msgid "Changes is WM_TRANSIENT_FOR property are unsupported." msgstr "Muutoksia WM_TRANSIENT_FOR ominaisuudessa ei tueta." # -#: ../ioncore/clientwin.c:809 +#: ../ioncore/clientwin.c:776 msgid "Client does not support the WM_DELETE protocol." msgstr "Asiakasikkuna ei tue WM_DELETE-protokollaa." -#: ../ioncore/clientwin.c:1306 +#: ../ioncore/clientwin.c:1298 msgid "Saved client window does not want to be managed." msgstr "Talletettu asiakasikkuna ei halua sitä hallittavan." @@ -285,75 +281,66 @@ msgstr "Talletettu asiakasikkuna ei halua sit msgid "Unable to store colourmap watch info." msgstr "Värikartan valvonnan alustaminen epäonnistui." -#: ../ioncore/region.c:46 +#: ../ioncore/region.c:47 msgid "Creating region with negative width or height!" msgstr "Yritys luoda korkeudeltaan tai leveydeltään negatiivinen alue." -#: ../ioncore/region.c:94 +#: ../ioncore/region.c:95 #, c-format msgid "Destroying object \"%s\" with client windows as children." -msgstr "Olio \"%s\", jolla on vielä asiakasikkunoita lapsena, tuhotaan." +msgstr "Tuhotaan kappale \"%s\", jolla on vielä asiakasikkunoita." + +#: ../ioncore/region.c:434 +#, c-format +msgid "Can not destroy %s: contains client windows." +msgstr "Kappaletta %s ei voida tuhota, sillä se sisältää asiakasikkunoita." + +#: ../ioncore/region.c:435 +msgid "(unknown)" +msgstr "(tuntematon)" # -#: ../ioncore/region.c:395 +#: ../ioncore/region.c:498 msgid "Failed to rescue some client windows - not closing." msgstr "Joidenkin asiakasikkunoiden pelastaminen epäonnistui - ei suljeta." -#: ../ioncore/attach.c:71 ../ioncore/pholder.c:46 -msgid "Unable to reparent." -msgstr "Vanhemman vaihto epäonnistui." - -#: ../ioncore/attach.c:157 ../ioncore/frame-pointer.c:282 +#: ../ioncore/attach.c:58 ../ioncore/frame-pointer.c:280 #, c-format msgid "Attempt to make region %s manage its ancestor %s." msgstr "Yritys saattaa alue %s hallitsemaan sen esivanhempaa %s." -#: ../ioncore/manage.c:77 +#: ../ioncore/attach.c:83 +msgid "Unable to reparent." +msgstr "Vanhemman vaihto epäonnistui." + +#: ../ioncore/attach.c:92 +msgid "Unexpected attach error: trying to recover by attaching to screen." +msgstr "Tuntematon liitäntävirhe: yritetään toipua liittämällä näyttöön." + +#: ../ioncore/attach.c:111 +msgid "Failed recovery." +msgstr "Toipuminen epäonnistui." + +#: ../ioncore/manage.c:193 msgid "Unable to find a screen for a new client window." msgstr "Uudelle asiakasikkunalle ei löytynyt näyttöä." -#: ../ioncore/rootwin.c:223 +#: ../ioncore/rootwin.c:218 #, c-format msgid "Unable to redirect root window events for screen %d." msgstr "Juuri-ikkunan %d viestien uudelleenohjaus epäonnistui." -#: ../ioncore/rootwin.c:319 ../ioncore/rootwin.c:344 -msgid "Xinerama sanity check failed; overlapping screens detected." -msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja." - -#: ../ioncore/rootwin.c:326 ../ioncore/rootwin.c:351 -msgid "Xinerama sanity check failed; zero size detected." -msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja." - -#: ../ioncore/rootwin.c:379 ../ioncore/rootwin.c:397 -msgid "Don't know how to get Xinerama information for multiple X root windows." -msgstr "Xinerama-tietoa ei osata käyttää usealle juuri-ikkunalle." - -#: ../ioncore/rootwin.c:393 -msgid "Error retrieving Xinerama information." -msgstr "Xinerama-tietoja ei saatu." - -#: ../ioncore/rootwin.c:432 ../ioncore/rootwin.c:451 -#, c-format -msgid "Unable to setup Xinerama screen %d." -msgstr "Xinerama-ruudun %d hallittavaksi saattaminen epäonnistui." - -#: ../ioncore/rootwin.c:464 -#, c-format -msgid "Unable to setup X screen %d." -msgstr "X-ruudun %d hallittavaksi saattaminen epäonnistui." - -#: ../ioncore/names.c:90 +#: ../ioncore/names.c:91 #, c-format msgid "Corrupt instance number %s." msgstr "Rikkinäinen instanssinumero %s." -#: ../ioncore/saveload.c:125 +#: ../ioncore/saveload.c:98 #, c-format msgid "Unknown class \"%s\", cannot create region." msgstr "Luokka \"%s\" on tuntematon. Aluetta ei voida luoda." -#: ../ioncore/saveload.c:205 +#: ../ioncore/saveload.c:202 #, c-format msgid "" "There were errors loading layout. Backing up current layout savefile as\n" @@ -372,46 +359,46 @@ msgstr "" "tilanteen aiheuttavat virheet (mahdollisesti puuttuva moduuli?) muissa\n" "asetustiedostoissasi." -#: ../ioncore/saveload.c:248 +#: ../ioncore/saveload.c:253 msgid "Unable to get file for layout backup." msgstr "Sijoittelun varmuuskopiolle ei voitu muodostaa tiedostonimeä." -#: ../ioncore/saveload.c:252 +#: ../ioncore/saveload.c:257 #, c-format msgid "Backup file %s already exists." msgstr "Varmuuskopio %s on jo olemassa." -#: ../ioncore/saveload.c:258 +#: ../ioncore/saveload.c:263 msgid "Failed backup." msgstr "Varmuuskopionti epäonnistui." # -#: ../ioncore/saveload.c:263 +#: ../ioncore/saveload.c:268 msgid "Unable to initialise layout on any screen." msgstr "Sijoittelun alustus epäonnistui kaikilla näytöillä." -#: ../ioncore/saveload.c:283 +#: ../ioncore/saveload.c:295 #, c-format msgid "Unable to get configuration for screen %d." msgstr "Ruudun %d asetukset puuttuvat." -#: ../ioncore/saveload.c:296 +#: ../ioncore/saveload.c:308 msgid "Unable to save layout." msgstr "Sijoittelun talletus epäonnistui." -#: ../ioncore/conf.c:143 +#: ../ioncore/conf.c:235 msgid "User directory can not be set." msgstr "Käyttäjän hakemistoa ei pystytä asettamaan." -#: ../ioncore/conf.c:217 +#: ../ioncore/conf.c:309 msgid "Some bindmaps were empty, loading ioncore_efbb." msgstr "Jotkut sidontakartat olivat tyhjiä. Ladataan ioncore_efbb." -#: ../ioncore/fullscreen.c:98 +#: ../ioncore/fullscreen.c:49 msgid "Failed to enter full screen mode." msgstr "Vaihto kokoruudun tilaan epäonnistui." -#: ../ioncore/fullscreen.c:120 +#: ../ioncore/fullscreen.c:83 msgid "" "Failed to return from full screen mode; remaining manager or parent from " "previous location refused to manage us." @@ -420,45 +407,40 @@ msgstr "" "tai vanhempi kieltäytyi hallitsemasta ikkunaa." # -#: ../ioncore/mplex.c:172 -msgid "Refusing to destroy - not empty." -msgstr "Tuhoamisesta kieltäydytään - ei tyhjä." - -# -#: ../ioncore/mplex.c:1678 +#: ../ioncore/mplex.c:1685 msgid "Invalid position setting." msgstr "Virheellinen paikka-asetus." # -#: ../ioncore/mplex.c:1718 +#: ../ioncore/mplex.c:1725 msgid "Invalid action setting." msgstr "Virheellinen toiminto-asetus." -#: ../ioncore/gr.c:119 +#: ../ioncore/gr.c:120 #, c-format msgid "Drawing engine %s is not registered!" msgstr "Piirtomoottoria %s ei ole rekisteröity!" -#: ../ioncore/gr.c:138 +#: ../ioncore/gr.c:139 #, c-format msgid "Unable to find brush for style '%s'." msgstr "Tyylille '%s' ei löytynyt pensseliä." -#: ../ioncore/gr.c:408 +#: ../ioncore/gr.c:646 msgid "No drawing engines loaded, trying \"de\"." msgstr "Yhtään piirtomoottoria ei ole ladattu. Yritetään oletusta \"de\"." -#: ../ioncore/group.c:184 ../mod_tiling/tiling.c:96 +# +#: ../ioncore/frame-draw.c:314 +msgid "" +msgstr "" + +#: ../ioncore/group.c:186 ../mod_tiling/tiling.c:92 #, c-format msgid "Error reparenting %s." msgstr "Virhe alueen %s vanhemman vaihdossa." -# -#: ../ioncore/group.c:481 ../mod_tiling/tiling.c:668 -msgid "Workspace not empty - refusing to destroy." -msgstr "Työpöytää ei voida tuhota, koska se ei ole tyhjä." - -#: ../ioncore/group.c:680 +#: ../ioncore/group.c:711 msgid "'bottom' already set." msgstr "'pohja' on jo asetettu." @@ -471,101 +453,112 @@ msgstr "Virheellinen parametri." msgid "Invalid direction parameter." msgstr "Virheellinen suunta." -#: ../ioncore/group-ws.c:67 +#: ../ioncore/group-ws.c:51 #, c-format msgid "Unknown placement method \"%s\"." msgstr "Tuntematon sijoittelumenetelmä \"%s\"." +#: ../ioncore/detach.c:176 +msgid "Failed to reattach." +msgstr "Uudelleenliittäminen epäonnistui" + +#: ../ioncore/screen-notify.c:190 +msgid "act: " +msgstr "act: " + # # -#: ../mod_tiling/tiling.c:77 +#: ../mod_tiling/tiling.c:73 msgid "Split not on workspace." msgstr "Jako ei ole tällä työpöydällä." -#: ../mod_tiling/tiling.c:373 +#: ../mod_tiling/tiling.c:348 msgid "Unable to create a node for status display." msgstr "Solmun luonti tilanäytölle epäonnistui." -#: ../mod_tiling/tiling.c:386 +#: ../mod_tiling/tiling.c:361 msgid "Unable to create new split for status display." msgstr "Uuden jaon tekeminen tilanäytölle epäonnistui." -#: ../mod_tiling/tiling.c:937 +#: ../mod_tiling/tiling.c:710 +msgid "Tiling in useless state." +msgstr "Laatoitus kelvottomassa tilassa." + +#: ../mod_tiling/tiling.c:924 msgid "Invalid direction" msgstr "Virheellinen suunta." # -#: ../mod_tiling/tiling.c:970 ../mod_tiling/split.c:1018 +#: ../mod_tiling/tiling.c:957 ../mod_tiling/split.c:1018 msgid "Invalid node." msgstr "Epäkelpo solmu." # -#: ../mod_tiling/tiling.c:989 +#: ../mod_tiling/tiling.c:976 msgid "Unable to split." msgstr "Halkaisu ei ole mahdollista." -#: ../mod_tiling/tiling.c:1092 -msgid "Nil frame." -msgstr "Kehys on asettamatta." - -#: ../mod_tiling/tiling.c:1097 -msgid "The frame is not managed by the workspace." -msgstr "Kehys ei ole tämän työpöydän hallinnoima." +#: ../mod_tiling/tiling.c:1090 +msgid "" +"Unable to unsplit: Could not move client windows elsewhere within the tiling." +msgstr "" +"Ei voida poistaa halkaisua: asiakasikkunoita ei voitu siirtää muualle " +"laatoituksessa." -#: ../mod_tiling/tiling.c:1196 +#: ../mod_tiling/tiling.c:1207 msgid "Nil parameter." msgstr "Parametri on asettamatta." -#: ../mod_tiling/tiling.c:1201 +#: ../mod_tiling/tiling.c:1212 msgid "Manager doesn't match." msgstr "Hallitsija on väärä." -#: ../mod_tiling/tiling.c:1238 +#: ../mod_tiling/tiling.c:1249 msgid "The status display is not a valid parameter for this routine." msgstr "Tilanäyttö ei ole kelpo parametri tälle toiminnolle." -#: ../mod_tiling/tiling.c:1329 +#: ../mod_tiling/tiling.c:1340 msgid "Refusing to float split directly containing the status display." msgstr "Tilanäytön suoraan sisältävää jakoa ei voida kelluttaa." -#: ../mod_tiling/tiling.c:1392 +#: ../mod_tiling/tiling.c:1403 msgid "No suitable split here." msgstr "Ei sopivaa jakoa tässä." # -#: ../mod_tiling/tiling.c:1428 +#: ../mod_tiling/tiling.c:1439 msgid "Could not get split tree." msgstr "Halkaisupuu puuttuu." -#: ../mod_tiling/tiling.c:1449 +#: ../mod_tiling/tiling.c:1460 msgid "Workspace already has a status display node." msgstr "Työpöydällä on jo solmu tilanäytölle." # -#: ../mod_tiling/tiling.c:1487 +#: ../mod_tiling/tiling.c:1498 msgid "Missing region parameters." msgstr "Alueen parameterit puuttuu." -#: ../mod_tiling/tiling.c:1531 ../mod_tiling/splitfloat.c:780 +#: ../mod_tiling/tiling.c:1542 ../mod_tiling/splitfloat.c:780 msgid "Invalid direction." msgstr "Virheellinen suunta." # -#: ../mod_tiling/tiling.c:1606 +#: ../mod_tiling/tiling.c:1617 msgid "No split type given." msgstr "Halkaisun tyyppiä ei ole asetettu." -#: ../mod_tiling/tiling.c:1619 +#: ../mod_tiling/tiling.c:1630 msgid "Unknown split type." msgstr "Tuntematon halkaisutyyppi." # # -#: ../mod_tiling/tiling.c:1659 +#: ../mod_tiling/tiling.c:1670 msgid "The workspace is empty." msgstr "Työpöytä on tyhjä." -#: ../mod_tiling/placement.c:106 +#: ../mod_tiling/placement.c:104 #, c-format msgid "" "Ooops... could not find a region to attach client window to on workspace %s." @@ -581,15 +574,15 @@ msgid "REGION_RQGEOM_TRYONLY unsupported for status display." msgstr "REGION_RQGEOM_TRYONLY:ä ei tueta tilanäytölle." # -#: ../mod_tiling/split.c:1082 +#: ../mod_tiling/split.c:1083 msgid "Splitting the status display is not allowed." msgstr "Tilanäytön halkaisu ei ole sallittu." -#: ../mod_tiling/split.c:1113 ../mod_tiling/splitfloat.c:903 +#: ../mod_tiling/split.c:1114 ../mod_tiling/splitfloat.c:903 msgid "Unable to split: not enough free space." msgstr "Ei voida halkaista: liian vähän tilaa." -#: ../mod_tiling/split.c:1864 +#: ../mod_tiling/split.c:1865 #, c-format msgid "Unable to get configuration for %s." msgstr "Alueelle \"%s\" ei saatu asetuksia." @@ -602,33 +595,33 @@ msgstr "Tilan msgid "Status display badly located in split tree." msgstr "Tilanäyttö on huonosti sijoittuneena halkaisupuuhun." -#: ../mod_tiling/ops.c:28 -msgid "Already detached" -msgstr "Irroitettu jo" - -#: ../mod_tiling/ops.c:142 +#: ../mod_tiling/ops.c:72 ../mod_tiling/ops.c:120 msgid "Not member of a group" msgstr "Ei jäsenenä missään ryhmässä" -#: ../mod_tiling/ops.c:147 +#: ../mod_tiling/ops.c:77 msgid "Manager group already has bottom" msgstr "Managerilla on jo 'pohja'" -#: ../mod_query/wedln.c:777 +#: ../mod_tiling/ops.c:154 +msgid "Unable to move a region from tiling to group." +msgstr "Ei voitu siirtää kappaletta laatoituksesta ryhmään." + +#: ../mod_query/wedln.c:813 msgid "history" msgstr "hist.täyd." -#: ../mod_query/fwarn.c:34 +#: ../mod_query/fwarn.c:35 msgid "Error:\n" msgstr "Virhe:\n" # -#: ../mod_menu/menu.c:537 +#: ../mod_menu/menu.c:601 msgid "Empty menu." msgstr "Tyhjä valikko." # -#: ../mod_sm/sm.c:110 +#: ../mod_sm/sm.c:111 msgid "Failed to set session directory." msgstr "Istuntohakemiston asetus epäonnistui." @@ -658,7 +651,7 @@ msgstr "Virhe istunnonhallinan kutsussa IceAddConnectionWatch." msgid "Unable to connect to the session manager." msgstr "Yhteydenotto istunnonhallintaohjelmaan epäonnistui." -#: ../mod_sp/main.c:85 +#: ../mod_sp/main.c:126 msgid "Unable to create scratchpad." msgstr "Suttausalueen luonti epäonnistui." @@ -666,44 +659,53 @@ msgstr "Suttausalueen luonti ep msgid "reading a pipe" msgstr "putken luku" -#: ../mod_statusbar/statusbar.c:1046 +#: ../mod_statusbar/main.c:159 +msgid "ion-statusd timed out." +msgstr "ion-statusd:n käynnistyksen aikaraja umpeutui." + +#: ../mod_statusbar/statusbar.c:1081 #, c-format msgid "[ %date || load: %load ] %filler%systray" msgstr "" -#: ../de/init.c:42 +#: ../de/init.c:68 #, c-format msgid "Border attribute %s sanity check failed." msgstr "Reunan arvon '%s' järkevyystarkistus epäonnistui." -#: ../de/init.c:65 +#: ../de/init.c:91 #, c-format msgid "Unknown border style \"%s\"." msgstr "Reunan tyyli \"%s\" on tuntematon." -#: ../de/init.c:97 +#: ../de/init.c:111 +#, c-format +msgid "Unknown border side configuration \"%s\"." +msgstr "Reunan sivuasetus \"%s\" on tuntematon." + +#: ../de/init.c:144 #, c-format msgid "Unable to allocate colour \"%s\"." msgstr "Värin \"%s\" varaaminen epäonnistui." -#: ../de/init.c:160 +#: ../de/init.c:210 #, c-format msgid "Corrupt substyle table %d." msgstr "Alityylin %d taulu on rikki." -#: ../de/init.c:193 +#: ../de/init.c:243 #, c-format msgid "Unknown text alignment \"%s\"." msgstr "Tuntematon tekstin tasaus \"%s\"." -#: ../de/init.c:263 +#: ../de/init.c:319 #, c-format msgid "'based_on' for %s points back to the style itself." msgstr "Tyylin %s 'based_on' -asetus osoittaa itseensä." -#: ../de/init.c:266 +#: ../de/init.c:322 #, c-format -msgid "Unknown base style \"%s\"." +msgid "Unknown base style. \"%s\"" msgstr "Tuntematon pohjatyyli \"%s\"." #: ../de/font.c:47 @@ -725,8 +727,7 @@ msgid "Failed to load fallback font." msgstr "Hätävarakirjaisimen lataus epäonnistui." #: ../de/style.c:315 -#, c-format -msgid "Style %s still in use [%d] but the module is being unloaded!" +msgid "Style is still in use [%d] but the module is being unloaded!" msgstr "Tyyli %s on vielä käytössä [%d], mutta moduulia poistetaan!" #: ../ion/ion.c:42 ../pwm/pwm.c:42 @@ -742,53 +743,43 @@ msgid "Add directory to search path" msgstr "Lisää hakemisto hakupolulle" #: ../ion/ion.c:51 ../pwm/pwm.c:51 -msgid "Manage default root window/non-Xinerama screen only" -msgstr "" -"Hallitse vain oletusarvoista juuri-ikkunaa. (Vastaa ensisijaista näyttöä jos " -"Xinerama ei ole käytössä.)" - -#: ../ion/ion.c:55 -msgid "Use Xinerama screen information (default: 1/yes)" -msgstr "Hyödynnä Xineramaa (oletus: 1/kyllä)" +msgid "Manage default screen only" +msgstr "Hallitse vain oletusarvoista juuri-ikkunaa." -#: ../ion/ion.c:58 ../pwm/pwm.c:58 -msgid "Ignored: not compiled with Xinerama support" -msgstr "Jätetään huomiotta: ohjelmaa ei ole käännetty Xinerama-tuella" - -#: ../ion/ion.c:62 ../pwm/pwm.c:62 +#: ../ion/ion.c:54 ../pwm/pwm.c:54 msgid "Name of session (affects savefiles)" msgstr "Istunnon nimi (vaikuttaa talletustiedostoihin)" -#: ../ion/ion.c:65 ../pwm/pwm.c:65 +#: ../ion/ion.c:57 ../pwm/pwm.c:57 msgid "Session manager client ID" msgstr "Istunnonhallinnan asiakastunniste" -#: ../ion/ion.c:68 ../pwm/pwm.c:68 +#: ../ion/ion.c:60 ../pwm/pwm.c:60 msgid "Do not create startup error log and display it with xmessage." msgstr "Älä luo käynnistysvirhelokia ja näytä sitä xmessage:lla." -#: ../ion/ion.c:72 ../pwm/pwm.c:72 +#: ../ion/ion.c:64 ../pwm/pwm.c:64 msgid "Show this help" msgstr "Näytä tämä aputeksti" -#: ../ion/ion.c:75 ../pwm/pwm.c:75 +#: ../ion/ion.c:67 ../pwm/pwm.c:67 msgid "Show program version" msgstr "Näytä ohjelman versio" -#: ../ion/ion.c:78 ../pwm/pwm.c:78 +#: ../ion/ion.c:70 ../pwm/pwm.c:70 msgid "Show about text" msgstr "Näytä tietoja ohjelmasta" -#: ../ion/ion.c:93 +#: ../ion/ion.c:85 msgid "Could not get user configuration file directory." msgstr "Käyttäjän asetustiedostohakemisto puuttuu, eikä sitä voitu luoda." -#: ../ion/ion.c:107 +#: ../ion/ion.c:99 #, c-format msgid "%s/welcome.txt" msgstr "%s/welcome.fi.txt" -#: ../ion/ion.c:140 ../pwm/pwm.c:87 +#: ../ion/ion.c:132 ../pwm/pwm.c:79 #, c-format msgid "" "Usage: %s [options]\n" @@ -797,28 +788,20 @@ msgstr "" "Käyttö: %s [valintoja]\n" "\n" -#: ../ion/ion.c:200 ../pwm/pwm.c:150 -msgid "Invalid parameter to -xinerama." -msgstr "Virheellinen parametri -xinerama:lle" - # -#: ../ion/ion.c:219 ../pwm/pwm.c:169 +#: ../ion/ion.c:200 ../pwm/pwm.c:150 msgid "Invalid command line." msgstr "Virheellinen komentorivi." -#: ../ion/ion.c:241 +#: ../ion/ion.c:222 msgid "Ion startup error log:\n" msgstr "Ionin käynnistysvirheloki:\n" -#: ../ion/ion.c:252 ../pwm/pwm.c:202 +#: ../ion/ion.c:233 ../pwm/pwm.c:183 msgid "Refusing to start due to encountered errors." msgstr "Ohjelma kieltäytyy käynnistymästä tavattujen virheiden johdosta." -#: ../pwm/pwm.c:55 -msgid "Use Xinerama screen information (default: 0/no)" -msgstr "Hyödynnä Xineramaa (oletus: 0/ei)" - -#: ../pwm/pwm.c:191 +#: ../pwm/pwm.c:172 msgid "PWM startup error log:\n" msgstr "PWM:n käynnistysvirheloki:\n" @@ -889,7 +872,7 @@ msgstr "" #: ../../libextl-3/luaextl.c:1356 msgid "Returned dead object." -msgstr "Kuollut olio palautettu." +msgstr "Kuollut kappale palautettu." #: ../../libextl-3/luaextl.c:1359 #, c-format @@ -938,16 +921,16 @@ msgstr "" "kykenee." # -#: ../../libextl-3/luaextl.c:2373 +#: ../../libextl-3/luaextl.c:2347 msgid "Maximal serialisation depth reached." msgstr "Suurin mahdollinen talletuksen rekursiosyvyys saavutettu." -#: ../../libextl-3/luaextl.c:2394 +#: ../../libextl-3/luaextl.c:2368 #, c-format msgid "Unable to serialise type %s." msgstr "Tyyppiä %s ei voida tallettaa." -#: ../../libextl-3/luaextl.c:2425 +#: ../../libextl-3/luaextl.c:2399 msgid "-- This file has been generated by Ion. Do not edit.\n" msgstr "-- Tämä tiedosto on Ionin luoma. Älä editoi sitä.\n" @@ -960,619 +943,629 @@ msgstr "" "Tyyppitarkistus epäonnistui tason 2 kutsunkäsittelijässä parametrille #%d " "(oli %s, odotettiin %s)." -msgid "Grow-D" -msgstr "Kasvu: alas" - -msgid "Grow-U" -msgstr "Kasvu: ylös" - -msgid "Grow-R" -msgstr "Kasvu: oikealle" - -msgid "Grow-L" -msgstr "Kasvu: vasemmalle" - -msgid "Pos-BR" -msgstr "Paikka: alaoikea" - -msgid "Pos-BL" -msgstr "Paikka: alavasen" - -msgid "Pos-TR" -msgstr "Paikka: yläoikea" +msgid "Scroll the message or completions up/down." +msgstr "Vieritä viestiä tai täydennyksiä ylös/alas." -msgid "Pos-TL" -msgstr "Paikka: ylävasen" +msgid "Close the query/message box, not executing bound actions." +msgstr "Sulje kysely/viesti suorittamatta sidottuja toimintoja." -msgid "Toggle floating dock." -msgstr "Näytä/piiloita kelluva laituri (dock)." +msgid "Close the query and execute bound action." +msgstr "Sulje kysely ja suorita sidottu toiminta." -msgid "Clear the menu's typeahead find buffer." -msgstr "Tyhjää valikon hakupuskuri." +msgid "Complete from history" +msgstr "Täydennä historiasta" -msgid "Select next/previous menu entry." -msgstr "Siirry seuraavaan/edelliseen valintaan." +msgid "Try to complete the entered text or cycle through completions." +msgstr "Yritä täydentää syötetty teksti tai selaa täydennyksiä." # -# -msgid "Activate current menu entry." -msgstr "Suorita valinta." - -msgid "Close the menu." -msgstr "Sulje valikko." - -msgid "New tiling" -msgstr "Uusi laatoitus" - -msgid "Detach" -msgstr "Irroita" +msgid "Clear mark/cancel selection." +msgstr "Lopeta tekstin valinta." # -msgid "Transpose" -msgstr "Käännä" +msgid "Copy selection." +msgstr "Kopioi valittu teksti." # -msgid "Flip" -msgstr "Peilaa" +msgid "Cut selection." +msgstr "Leikkaa valittu teksti." # -# -msgid "Split horizontally" -msgstr "Jaa vaakasuunnassa" +msgid "Set mark/begin selection." +msgstr "Aloita tekstin valinta." -# -# -msgid "Split vertically" -msgstr "Jaa pystysuunnassa" +msgid "Paste from the clipboard." +msgstr "Liimaa teksti leikelaudalta." # -msgid "At root" -msgstr "Juuressa" +msgid "Select next/previous (matching) history entry." +msgstr "Näytä seuraava/edellinen vastaus muistista." -msgid "Below" -msgstr "Alapuolella" +msgid "Transpose characters." +msgstr "Transponoi merkit." -msgid "Above" -msgstr "Yläpuolella" +msgid "Delete the whole line." +msgstr "Tuhoa koko rivi." -msgid "At right" -msgstr "Oikealla" +msgid "Delete to end of line." +msgstr "Tuhoa merkit rivin loppuun saakka." -msgid "At left" -msgstr "Vasemmalla" +msgid "Delete one word forward/backward." +msgstr "Tuhoa yksi sana eteen/taakse." -msgid "Float split" -msgstr "Kelluta" +msgid "Delete previous character." +msgstr "Tuhoa edellinen merkki." -# -msgid "Destroy frame" -msgstr "Tuhoa kehys" +msgid "Delete next character." +msgstr "Poista seuraava merkki." -msgid "Tile frame, if no tiling exists on the workspace" -msgstr "Laatoita kehys, jos työpöydällä ei ole kehystä" +msgid "Skip one word forward/backward." +msgstr "Ohita yksi sana eteen/taaksepäin" -msgid "Detach window from tiled frame" -msgstr "Irroita ikkuna laatoitetusta kehyksestä" +msgid "Go to end/beginning." +msgstr "Mene rivin alkuun/loppuun." -msgid "Destroy current frame." -msgstr "Tuhoa tämänhetkinen kehys." +msgid "Move one character forward/backward." +msgstr "Siirry yksi merkki eteen/taakse." -msgid "Split current frame horizontally." -msgstr "Halkaise tämänhetkinen kehys vaakasuunnassa." +msgid "Kill" +msgstr "Tapa" -msgid "Go to frame above/below/right/left of current frame." -msgstr "" -"Siirry tämänhetkisen kehyksen yllä/alla/vasemmalle/oikealla olevaan " -"kehykseen." +msgid "Attach tagged" +msgstr "Liitä merkityt" -msgid "Split current frame vertically." -msgstr "Halkaise tämänhetkinen kehys pystysuunnassa." +msgid "Rename" +msgstr "Uudelleennimeä" -msgid "Failed to create statusbar." -msgstr "Epäonnistuttiin tilarivin luonnissa" +msgid "Close" +msgstr "Sulje" -msgid "Screen already has an stdisp. Refusing to create a statusbar." -msgstr "Ruudulla on jo tilanäyttö. Kieltäydytään luomasta tilariviä." +msgid "De/reattach" +msgstr "Irroita/liitä" -msgid "Screen not found." -msgstr "Ruutua ei löytynyt." +msgid "Toggle tag" +msgstr "Muuta merkintää" -msgid "Failed to start ion-statusd." -msgstr "Ion-statusd:n käynnistys eopäonnistui." +msgid "Window info" +msgstr "Ikkunan tiedot" -msgid "Errors starting ion-statusd:\n" -msgstr "Ion-statusd:n käynnistysvirheet:\n" +msgid "Clear tags" +msgstr "Poista merkinnät" -msgid "Could not find %s" -msgstr "Ei löydettyä %s:ää." +msgid "Exit" +msgstr "Poistu" -msgid "ion-statusd quit." -msgstr "ion-statusd päätti suorituksen." +msgid "Restart TWM" +msgstr "Käynnistä TWM" -msgid "Not a directory." -msgstr "Ei hakemisto." +msgid "Restart" +msgstr "Uudelleenkäynnistä" -msgid "Invalid command" -msgstr "Virheellinen komento" +msgid "Save" +msgstr "Talleta" -msgid "Error in command string: " -msgstr "Virhe komentojonossa:" +msgid "Session" +msgstr "Istunto" -msgid "Error compiling guard: %s" -msgstr "Virhe vahdin käännössä. %s" +msgid "Styles" +msgstr "Tyylit" -msgid "Invalid guard %s." -msgstr "Virheellinen vahti %s." +msgid "About Ion" +msgstr "Tietoja Ionista" -msgid "Main menu:" -msgstr "Päävalikko:" +msgid "Help" +msgstr "Ohjeet" -msgid "Context menu:" -msgstr "Kontekstivalikko:" +msgid "Lock screen" +msgstr "Lukitse näyttö" -msgid "Floating frame" -msgstr "Kelluva kehys" +msgid "Terminal" +msgstr "Pääteohjelma" -msgid "Tiled frame" -msgstr "Laatoitettu kehys" +# +msgid "Run..." +msgstr "Suorita..." -msgid "Tiling" -msgstr "Laatoitus" +# +msgid "Move in specified direction." +msgstr "Liiku vastaavaan suuntaan." + +msgid "Shrink in specified direction." +msgstr "Kutista vastaavaan suuntaan." # -msgid "Workspace" -msgstr "Työpöytä" +msgid "Grow in specified direction." +msgstr "Kasvata vastaavaan suuntaan." -msgid "Screen" -msgstr "Näyttö" +msgid "End the resize mode." +msgstr "Siirry tilasta pois." -msgid "Frame" -msgstr "Kehys" +msgid "Cancel the resize mode." +msgstr "Peruuta tilasta." -msgid "Recursive table - unable to deepcopy" -msgstr "Rekursiivinen taulu - ei voida syväkopioida." +msgid "Move the frame." +msgstr "Siirrä kehystä." -msgid "" -"Making the following minimal emergency mappings:\n" -" F2 -> xterm\n" -" F11 -> restart\n" -" F12 -> exit\n" -" Mod1+C -> close\n" -" Mod1+K P/N -> WFrame.switch_next/switch_prev\n" -msgstr "" -"Tehdään seuraavat vähimmäiset hätäsidonnat:\n" -" F2 -> xterm\n" -" F11 -> uudelleenkäynnistys\n" -" F12 -> lopetus\n" -" Mod1+C -> sulkeminen\n" -" Mod1+K P/N -> vaihto kehyksen sisällä\n" +msgid "Lower the frame." +msgstr "Alenna kehystä." -msgid "Unable to append to non-table menu" -msgstr "Ei voida lisätä valikkoon, koska sitä ei ole määritelty tauluna " +# +msgid "Raise the frame." +msgstr "Nosta kehys." -msgid "Cannot save selection." -msgstr "Ei voida tallettaa valintaa." +msgid "Toggle shade mode" +msgstr "Kytke litistys päälle/pois." -msgid "Save look selection in %s?" -msgstr "Talletaanko ulkonäköasetus tiedostoon %s?" +msgid "Attach tagged objects to this frame." +msgstr "Liitä merkityt kappaleet tähän kehykseen." -msgid "Too much result data" -msgstr "Liian suuri vastaus" +msgid "Maximize the frame horizontally/vertically." +msgstr "Maksimoi kehys vaaka/pystysuunnassa." -msgid "Could not find client window %s." -msgstr "Asiakasikkunaa %s ei löytynyt." +msgid "Move current object within the frame left/right." +msgstr "" +"Siirrä kehyksessä tällä hetkellä näytettävää kappaletta vasemmalle/oikealle." -msgid "Cannot attach: different root windows." -msgstr "Ei voida liittää: eri juuri-ikkunat." +msgid "Switch to next/previous object within the frame." +msgstr "Siirry seuraavaan/edelliseen kehyksen jakavaan kappaleeseen." -msgid "Unknown error" -msgstr "Tuntematon virhe" +msgid "Switch to n:th object within the frame." +msgstr "Siirry n:teen kehyksen jakavaan kappaleeseen." -msgid "Go to window:" -msgstr "Mene ikkunaan:" +# +msgid "Query for a client window to attach." +msgstr "Kysy liitettävää asiakasikkunaa." -msgid "Attach window:" -msgstr "Liitä ikkuna:" +msgid "Move objects between frames by dragging and dropping the tab." +msgstr "" +"Siirrä kappaletta kehysten välillä raahaamalla ja pudottamalla välilehti." -msgid "Go to or create workspace:" -msgstr "Mene tai luo työpöytä:" +msgid "Resize the frame." +msgstr "Muuta kehyksen kokoa." -msgid "Exit Ion/Shutdown session (y/n)?" -msgstr "Poistu Ionista/Lopeta istunto (kyllä: y, ei: n)?" +msgid "Switch the frame to display the object indicated by the tab." +msgstr "Vaihda kehys näyttämään välilehden ilmoittama kappale." -msgid "Restart Ion (y/n)?" -msgstr "Uudelleenkäynnistä Ion (kyllä: y, ei: n)?" +msgid "Begin move/resize mode." +msgstr "Aloita siirto ja koonmuutostila." -msgid "Frame name:" -msgstr "Kehyksen nimi:" +msgid "Display context menu." +msgstr "Näytä kontekstivalikko." -msgid "Workspace name:" -msgstr "Työpöydän nimi:" +# +msgid "Query for a client window to go to." +msgstr "Kysy asiakasikkunaa, johon siirtyä." -msgid "Edit file:" -msgstr "Muokkaa tiedostoa:" +msgid "Query for workspace to go to or create a new one." +msgstr "Kysy työpöytää jolle siirtyä, tai luo uusi." -msgid "View file:" -msgstr "Näytä tiedosto:" +msgid "Query for file to view." +msgstr "Kysy tiedostoa näytettäväksi." -msgid "Run:" -msgstr "Suorita:" +msgid "Query for file to edit." +msgstr "Kysy tiedostoa muokattavaksi." -msgid "Failed to open ~/.ssh/known_hosts" -msgstr "Tiedostoa ~/.ssh/known_hosts avaaminen epäonnistui." +msgid "Query for host to connect to with SSH." +msgstr "Ota SSH-yhteys kyseltävään koneeseen." -msgid "Failed to open ~/.ssh/config" -msgstr "Tiedoston ~/.ssh/config avaaminen epäonnistui." +msgid "Query for Lua code to execute." +msgstr "Kysy Lua-koodia ajettavaksi." -msgid "SSH to:" -msgstr "Avaa SSH-yhteys:" +msgid "Query for command line to execute." +msgstr "Kysy komentoriviä suoritettavaksi." -msgid "Manual page (%s):" -msgstr "Ohjesivu (%s):" +# +msgid "Run a terminal emulator." +msgstr "Käynnistä pääte-emulaattori." -msgid "Lua code:" -msgstr "Lua-koodia:" +msgid "Show the Ion manual page." +msgstr "Näytä Ionin ohjesivu." -msgid "Unknown menu %s." -msgstr "Tuntematon valikko %s." +msgid "Query for manual page to be displayed." +msgstr "Kysy ohjesivua näytettäväksi." -msgid "Missing submenu " -msgstr "Puuttuva alivalikko " +msgid "Toggle tag of current object." +msgstr "Merkitse aktiivinen kappale." -msgid "%s:" +msgid "Detach (float) or reattach an object to its previous location." msgstr "" +"Irroita (kelluta) tai uudelleenliitä kappale sen edelliseen sijaintiin." -msgid "No entry '%s'" -msgstr "Tuntematon valinta '%s'." +msgid "Close current object." +msgstr "Sulje aktiivinen kappale." +msgid "Toggle client window group full-screen mode" +msgstr "Muuta asiakasikkunaryhmän kokoruudun tilaa" + +# msgid "" -"\n" -"%sClass: %s\n" -"%sRole: %s\n" -"%sInstance: %s\n" -"%sXID: 0x%x" +"Send next key press to the client window. Some programs may not allow this " +"by default." msgstr "" -"\n" -"Luokka(class): %s\n" -"Rooli(role): %s\n" -"Instanssi(instance): %s\n" -"XID: 0x%x" - -msgid "Toggle scratchpad." -msgstr "Kytke suttausalue päälle/pois" +"Lähetä seuraava näppäinpainallus aktiiviselle asiakasikkunalle. Kaikki " +"ohjelmat eivät välttämättä salli tätä oletuksena." -msgid "Programs" -msgstr "Ohjelmat" +# +msgid "Kill client owning the client window." +msgstr "Tapa aktiivisen asiakasikkunan omistava ohjelma." -msgid "Lock screen" -msgstr "Lukitse näyttö" +# +msgid "" +"Nudge the client window. This might help with some programs' resizing " +"problems." +msgstr "" +"Tönäise aktiivista asiakasikkunaa. Tämä saattaa auttaa joidenkin ohjelmien " +"koko-ongelmien kanssa." -msgid "Help" -msgstr "Ohjeet" +msgid "Raise focused object, if possible." +msgstr "Nosta aktiivista kappaletta, jos mahdollista." -# -msgid "Workspaces" -msgstr "Työpöydät" +msgid "Backward-circulate focus." +msgstr "Kierrätä fokusta taaksepäin" -msgid "New" -msgstr "Uusi" +msgid "Forward-circulate focus." +msgstr "Kierrätä fokusta eteenpäin." -msgid "Styles" -msgstr "Tyylit" +msgid "Display the window list menu." +msgstr "Näytä ikkunavalikko." -msgid "Session" -msgstr "Istunto" +msgid "Display the main menu." +msgstr "Näytä päävalikko." -msgid "Close" -msgstr "Sulje" +# +# +msgid "Create a new workspace of chosen default type." +msgstr "Luo uusi työpöytä ennalta asetettua tyyppiä." -msgid "List" -msgstr "Lista" +# +msgid "Go to next/previous screen on multihead setup." +msgstr "Mene seuraavalle/edelliselle näytölle usean näytön järjestelmässä." # -msgid "" -"Switch to n:th object (workspace, full screen client window) within current " -"screen." -msgstr "" -"Siirry n:teen tämänhetkisen näytön lomittamaan olioon (työpöytä, kokoruudun " -"asiakasikkuna)." +msgid "Go to n:th screen on multihead setup." +msgstr "Siirry näytölle n usean näytön järjestelmässä." # -msgid "Switch to next/previous object within current screen." -msgstr "Siirry seuraavaan/edelliseen tämänhetkisen näytön lomittamaan olioon." +msgid "Clear all tags." +msgstr "Poista kaikki merkinnät." msgid "Go to first region demanding attention or previously active one." msgstr "" "Mene ensimmäiseen huomiota vaativaan alueeseen, tai edelliseen aktiiviseen." # -msgid "Clear all tags." -msgstr "Poista kaikki merkinnät." +msgid "Switch to next/previous object within current screen." +msgstr "" +"Siirry seuraavaan/edelliseen tämänhetkisen näytön lomittamaan kappaleeseen." # -msgid "Go to n:th screen on multihead setup." -msgstr "Siirry näytölle n usean näytön järjestelmässä." +msgid "" +"Switch to n:th object (workspace, full screen client window) within current " +"screen." +msgstr "" +"Siirry n:teen tämänhetkisen näytön lomittamaan kappaleeseen (työpöytä, " +"kokoruudun asiakasikkuna)." -# -msgid "Go to next/previous screen on multihead setup." -msgstr "Mene seuraavalle/edelliselle näytölle usean näytön järjestelmässä." +msgid "List" +msgstr "Lista" -# -# -msgid "Create a new workspace of chosen default type." -msgstr "Luo uusi työpöytä ennalta asetettua tyyppiä." +msgid "New" +msgstr "Uusi" -msgid "Display the main menu." -msgstr "Näytä päävalikko." +msgid "Dillo" +msgstr "" -msgid "Display the window list menu." -msgstr "Näytä ikkunavalikko." +msgid "Konqueror" +msgstr "" -msgid "Forward-circulate focus." -msgstr "Kierrätä fokusta eteenpäin." +msgid "Links" +msgstr "" -msgid "Backward-circulate focus." -msgstr "Kierrätä fokusta taaksepäin" +msgid "Opera" +msgstr "" -msgid "Raise focused object, if possible." -msgstr "Nosta fokusoitu olio, jos mahdollista." +msgid "Rxvt" +msgstr "" -# -msgid "" -"Nudge the client window. This might help with some programs' resizing " -"problems." +msgid "W3M" msgstr "" -"Tönäise aktiivista asiakasikkunaa. Tämä saattaa auttaa joidenkin ohjelmien " -"koko-ongelmien kanssa." -# -msgid "Kill client owning the client window." -msgstr "Tapa aktiivisen asiakasikkunan omistava ohjelma." +msgid "XTerm" +msgstr "" # +msgid "Workspaces" +msgstr "Työpöydät" + +msgid "Programs" +msgstr "Ohjelmat" + +msgid "Show the PWM manual page." +msgstr "Näytä PWM:n ohjesivu." + +msgid "Toggle scratchpad." +msgstr "Kytke suttausalue päälle/pois" + msgid "" -"Send next key press to the client window. Some programs may not allow this " -"by default." +"\n" +"%sClass: %s\n" +"%sRole: %s\n" +"%sInstance: %s\n" +"%sXID: 0x%x" msgstr "" -"Lähetä seuraava näppäinpainallus aktiiviselle asiakasikkunalle. Kaikki " -"ohjelmat eivät välttämättä salli tätä oletuksena." +"\n" +"Luokka(class): %s\n" +"Rooli(role): %s\n" +"Instanssi(instance): %s\n" +"XID: 0x%x" -msgid "Toggle client window group full-screen mode" -msgstr "Muuta asiakasikkunaryhmän kokoruudun tilaa" +msgid "No entry '%s'" +msgstr "Tuntematon valinta '%s'." -msgid "Close current object." -msgstr "Sulje aktiivinen olio." +msgid "%s:" +msgstr "" -msgid "Query for manual page to be displayed." -msgstr "Kysy ohjesivua näytettäväksi." +msgid "Missing submenu " +msgstr "Puuttuva alivalikko " -msgid "Show the Ion manual page." -msgstr "Näytä Ionin ohjesivu." +msgid "Unknown menu %s." +msgstr "Tuntematon valikko %s." -# -msgid "Run a terminal emulator." -msgstr "Käynnistä pääte-emulaattori." +msgid "Lua code:" +msgstr "Lua-koodia:" -msgid "Query for command line to execute." -msgstr "Kysy komentoriviä suoritettavaksi." +msgid "Manual page (%s):" +msgstr "Ohjesivu (%s):" -msgid "Query for Lua code to execute." -msgstr "Kysy Lua-koodia ajettavaksi." +msgid "SSH to:" +msgstr "Avaa SSH-yhteys:" -msgid "Query for host to connect to with SSH." -msgstr "Ota SSH-yhteys kyseltävään koneeseen." +msgid "Failed to open ~/.ssh/config" +msgstr "Tiedoston ~/.ssh/config avaaminen epäonnistui." -msgid "Query for file to edit." -msgstr "Kysy tiedostoa muokattavaksi." +msgid "Failed to open ~/.ssh/known_hosts" +msgstr "Tiedostoa ~/.ssh/known_hosts avaaminen epäonnistui." -msgid "Query for file to view." -msgstr "Kysy tiedostoa näytettäväksi." +msgid "Run:" +msgstr "Suorita:" -msgid "Query for workspace to go to or create a new one." -msgstr "Kysy työpöytää jolle siirtyä, tai luo uusi." +msgid "View file:" +msgstr "Näytä tiedosto:" -# -msgid "Query for a client window to go to." -msgstr "Kysy asiakasikkunaa, johon siirtyä." +msgid "Edit file:" +msgstr "Muokkaa tiedostoa:" -# -msgid "Query for a client window to attach." -msgstr "Kysy liitettävää asiakasikkunaa." +msgid "Workspace name:" +msgstr "Työpöydän nimi:" -msgid "Display context menu." -msgstr "Näytä kontekstivalikko." +msgid "Frame name:" +msgstr "Kehyksen nimi:" -msgid "Maximize the frame horizontally/vertically." -msgstr "Maksimoi kehys vaaka/pystysuunnassa." +msgid "Restart Ion (y/n)?" +msgstr "Uudelleenkäynnistä Ion (kyllä: y, ei: n)?" -msgid "Begin move/resize mode." -msgstr "Aloita siirto ja koonmuutostila." +msgid "Exit Ion/Shutdown session (y/n)?" +msgstr "Poistu Ionista/Lopeta istunto (kyllä: y, ei: n)?" -msgid "Switch the frame to display the object indicated by the tab." -msgstr "Vaihda kehys näyttämään välilehden ilmoittama olio." +msgid "Go to or create workspace:" +msgstr "Mene tai luo työpöytä:" -msgid "Resize the frame." -msgstr "Muuta kehyksen kokoa." +msgid "Attach window:" +msgstr "Liitä ikkuna:" -msgid "Move the frame." -msgstr "Siirrä kehystä." +msgid "Go to window:" +msgstr "Mene ikkunaan:" -msgid "Move objects between frames by dragging and dropping the tab." -msgstr "Siirrä olioita kehysten välillä raahaamalla ja pudottamalla välilehti." +msgid "New workspace layout (default):" +msgstr "Uuden työpöydän sijoitelma (default):" + +msgid "Unknown error" +msgstr "Tuntematon virhe" + +msgid "Unknown layout" +msgstr "Tuntematon sijoittelu." + +msgid "Cannot attach: different root windows." +msgstr "Ei voida liittää: eri juuri-ikkunat." + +msgid "Could not find client window %s." +msgstr "Asiakasikkunaa %s ei löytynyt." + +msgid "Too much result data" +msgstr "Liian suuri vastaus" + +msgid "Could not find %s" +msgstr "Ei löydettyä %s:ää." -msgid "Tag current object within the frame." -msgstr "Merkitse kehyksen tällä hetkellä näyttämä olio." +msgid "Not a directory." +msgstr "Ei hakemisto." -msgid "Switch to n:th object within the frame." -msgstr "Siirry n:teen kehyksen jakavaan olioon." +msgid "Invalid command" +msgstr "Virheellinen komento" -msgid "Switch to next/previous object within the frame." -msgstr "Siirry seuraavaan/edelliseen kehyksen jakavaan olioon." +msgid "Error in command string: " +msgstr "Virhe komentojonossa:" -msgid "Move current object within the frame left/right." -msgstr "" -"Siirrä kehyksessä tällä hetkellä näytettävää oliota vasemmalle/oikealle." +msgid "Error compiling guard: %s" +msgstr "Virhe vahdin käännössä. %s" -msgid "Attach tagged objects to this frame." -msgstr "Liitä merkityt oliot tähän kehykseen." +msgid "Invalid guard %s." +msgstr "Virheellinen vahti %s." -msgid "Toggle shade mode" -msgstr "Kytke litistys päälle/pois." +msgid "Main menu:" +msgstr "Päävalikko:" -# -msgid "Raise the frame." -msgstr "Nosta kehys." +msgid "Context menu:" +msgstr "Kontekstivalikko:" -msgid "Lower the frame." -msgstr "Alenna kehystä." +msgid "Floating frame" +msgstr "Kelluva kehys" -msgid "Cancel the resize mode." -msgstr "Peruuta tilasta." +msgid "Tiled frame" +msgstr "Laatoitettu kehys" -msgid "End the resize mode." -msgstr "Siirry tilasta pois." +msgid "Tiling" +msgstr "Laatoitus" # -msgid "Grow in specified direction." -msgstr "Kasvata vastaavaan suuntaan." +msgid "Workspace" +msgstr "Työpöytä" -msgid "Shrink in specified direction." -msgstr "Kutista vastaavaan suuntaan." +msgid "Screen" +msgstr "Näyttö" -# -msgid "Move in specified direction." -msgstr "Liiku vastaavaan suuntaan." +msgid "Frame" +msgstr "Kehys" -msgid "About Ion" -msgstr "Tietoja Ionista" +msgid "Recursive table - unable to deepcopy" +msgstr "Rekursiivinen taulu - ei voida syväkopioida." -msgid "XTerm" +msgid "" +"Making the following minimal emergency mappings:\n" +" F2 -> xterm\n" +" F11 -> restart\n" +" F12 -> exit\n" +" Mod1+C -> close\n" +" Mod1+K P/N -> WFrame.switch_next/switch_prev\n" msgstr "" +"Tehdään seuraavat vähimmäiset hätäsidonnat:\n" +" F2 -> xterm\n" +" F11 -> uudelleenkäynnistys\n" +" F12 -> lopetus\n" +" Mod1+C -> sulkeminen\n" +" Mod1+K P/N -> vaihto kehyksen sisällä\n" -msgid "W3M" -msgstr "" +msgid "Unable to append to non-table menu" +msgstr "Ei voida lisätä valikkoon, koska sitä ei ole määritelty tauluna " -msgid "Rxvt" -msgstr "" +msgid "Cannot save selection." +msgstr "Ei voida tallettaa valintaa." -msgid "Opera" -msgstr "" +msgid "Save look selection in %s?" +msgstr "Talletaanko ulkonäköasetus tiedostoon %s?" -msgid "Links" -msgstr "" +msgid "ion-statusd quit." +msgstr "ion-statusd päätti suorituksen." -msgid "Konqueror" -msgstr "" +msgid "Errors starting ion-statusd:\n" +msgstr "Ion-statusd:n käynnistysvirheet:\n" -msgid "Dillo" -msgstr "" +msgid "Failed to start ion-statusd." +msgstr "Ion-statusd:n käynnistys eopäonnistui." -# -msgid "Run..." -msgstr "Suorita..." +msgid "Screen not found." +msgstr "Ruutua ei löytynyt." -msgid "Save" -msgstr "Talleta" +msgid "Screen already has an stdisp. Refusing to create a statusbar." +msgstr "Ruudulla on jo tilanäyttö. Kieltäydytään luomasta tilariviä." -msgid "Restart" -msgstr "Uudelleenkäynnistä" +msgid "Failed to create statusbar." +msgstr "Epäonnistuttiin tilarivin luonnissa" -msgid "Restart TWM" -msgstr "Käynnistä TWM" +msgid "Split current frame vertically." +msgstr "Halkaise tämänhetkinen kehys pystysuunnassa." -msgid "Exit" -msgstr "Poistu" +msgid "Go to frame above/below/right/left of current frame." +msgstr "" +"Siirry tämänhetkisen kehyksen yllä/alla/vasemmalle/oikealla olevaan " +"kehykseen." -msgid "Kill" -msgstr "Tapa" +msgid "Split current frame horizontally." +msgstr "Halkaise tämänhetkinen kehys vaakasuunnassa." -msgid "Toggle tag" -msgstr "Muuta lippua" +msgid "Destroy current frame." +msgstr "Tuhoa tämänhetkinen kehys." -msgid "Attach tagged" -msgstr "Liitä merkityt" +msgid "Tile frame, if no tiling exists on the workspace" +msgstr "Laatoita kehys, jos työpöydällä ei ole kehystä" -msgid "Clear tags" -msgstr "Poista merkinnät" +# +msgid "Destroy frame" +msgstr "Tuhoa kehys" -msgid "Window info" -msgstr "Ikkunan tiedot" +# +# +msgid "Split vertically" +msgstr "Jaa pystysuunnassa" # -msgid "New workspace" -msgstr "Uusi työpöytä" +# +msgid "Split horizontally" +msgstr "Jaa vaakasuunnassa" -msgid "New empty workspace" -msgstr "Uusi tyhjä työpöytä" +# +msgid "Flip" +msgstr "Peilaa" # -msgid "Close workspace" -msgstr "Sulje työpöytä" +msgid "Transpose" +msgstr "Käännä" -msgid "Move one character forward/backward." -msgstr "Siirry yksi merkki eteen/taakse." +msgid "Untile" +msgstr "Hajoita laatoitus" -msgid "Go to end/beginning." -msgstr "Mene rivin alkuun/loppuun." +msgid "Float split" +msgstr "Kelluta" -msgid "Skip one word forward/backward." -msgstr "Ohita yksi sana eteen/taaksepäin" +msgid "At left" +msgstr "Vasemmalla" -msgid "Delete next character." -msgstr "Poista seuraava merkki." +msgid "At right" +msgstr "Oikealla" -msgid "Delete previous character." -msgstr "Tuhoa edellinen merkki." +msgid "Above" +msgstr "Yläpuolella" -msgid "Delete one word forward/backward." -msgstr "Tuhoa yksi sana eteen/taakse." +msgid "Below" +msgstr "Alapuolella" -msgid "Delete to end of line." -msgstr "Tuhoa merkit rivin loppuun saakka." +# +msgid "At root" +msgstr "Juuressa" -msgid "Delete the whole line." -msgstr "Tuhoa koko rivi." +msgid "New tiling" +msgstr "Uusi laatoitus" -msgid "Transpose characters." -msgstr "Transponoi merkit." +msgid "Close the menu." +msgstr "Sulje valikko." # -msgid "Select next/previous (matching) history entry." -msgstr "Näytä seuraava/edellinen vastaus muistista." +# +msgid "Activate current menu entry." +msgstr "Suorita valinta." -msgid "Paste from the clipboard." -msgstr "Liimaa teksti leikelaudalta." +msgid "Select next/previous menu entry." +msgstr "Siirry seuraavaan/edelliseen valintaan." -# -msgid "Set mark/begin selection." -msgstr "Aloita tekstin valinta." +msgid "Clear the menu's typeahead find buffer." +msgstr "Tyhjää valikon hakupuskuri." -# -msgid "Cut selection." -msgstr "Leikkaa valittu teksti." +msgid "Toggle floating dock." +msgstr "Näytä/piiloita kelluva laituri (dock)." -# -msgid "Copy selection." -msgstr "Kopioi valittu teksti." +msgid "Pos-TL" +msgstr "Paikka: ylävasen" -# -msgid "Clear mark/cancel selection." -msgstr "Lopeta tekstin valinta." +msgid "Pos-TR" +msgstr "Paikka: yläoikea" -msgid "Try to complete the entered text or cycle through completions." -msgstr "Yritä täydentää syötetty teksti tai selaa täydennyksiä." +msgid "Pos-BL" +msgstr "Paikka: alavasen" -msgid "Complete from history" -msgstr "Täydennä historiasta" +msgid "Pos-BR" +msgstr "Paikka: alaoikea" -msgid "Close the query and execute bound action." -msgstr "Sulje kysely ja suorita sidottu toiminta." +msgid "Grow-L" +msgstr "Kasvu: vasemmalle" -msgid "Close the query/message box, not executing bound actions." -msgstr "Sulje kysely/viesti suorittamatta sidottuja toimintoja." +msgid "Grow-R" +msgstr "Kasvu: oikealle" -msgid "Scroll the message or completions up/down." -msgstr "Vieritä viestiä tai täydennyksiä ylös/alas." +msgid "Grow-U" +msgstr "Kasvu: ylös" + +msgid "Grow-D" +msgstr "Kasvu: alas" msgid "press" msgstr "painallus" @@ -1592,6 +1585,71 @@ msgstr "" msgid "%s %s at %s" msgstr "%s %s osassa %s" +#~ msgid "Tag current object within the frame." +#~ msgstr "Merkitse kehyksen tällä hetkellä näyttämä kappale." + +#~ msgid "Xinerama sanity check failed; overlapping screens detected." +#~ msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja." + +#~ msgid "Xinerama sanity check failed; zero size detected." +#~ msgstr "Xinerama-tiedon järkevyystarkastus havaitsi päällekkäisiä ruutuja." + +#~ msgid "" +#~ "Don't know how to get Xinerama information for multiple X root windows." +#~ msgstr "Xinerama-tietoa ei osata käyttää usealle juuri-ikkunalle." + +#~ msgid "Error retrieving Xinerama information." +#~ msgstr "Xinerama-tietoja ei saatu." + +#~ msgid "Unable to setup Xinerama screen %d." +#~ msgstr "Xinerama-ruudun %d hallittavaksi saattaminen epäonnistui." + +#~ msgid "Unable to setup X screen %d." +#~ msgstr "X-ruudun %d hallittavaksi saattaminen epäonnistui." + +# +#~ msgid "Refusing to destroy - not empty." +#~ msgstr "Tuhoamisesta kieltäydytään - ei tyhjä." + +# +#~ msgid "Workspace not empty - refusing to destroy." +#~ msgstr "Työpöytää ei voida tuhota, koska se ei ole tyhjä." + +#~ msgid "Nil frame." +#~ msgstr "Kehys on asettamatta." + +#~ msgid "The frame is not managed by the workspace." +#~ msgstr "Kehys ei ole tämän työpöydän hallinnoima." + +#~ msgid "Already detached" +#~ msgstr "Irroitettu jo" + +#~ msgid "Use Xinerama screen information (default: 1/yes)" +#~ msgstr "Hyödynnä Xineramaa (oletus: 1/kyllä)" + +#~ msgid "Ignored: not compiled with Xinerama support" +#~ msgstr "Jätetään huomiotta: ohjelmaa ei ole käännetty Xinerama-tuella" + +#~ msgid "Invalid parameter to -xinerama." +#~ msgstr "Virheellinen parametri -xinerama:lle" + +#~ msgid "Use Xinerama screen information (default: 0/no)" +#~ msgstr "Hyödynnä Xineramaa (oletus: 0/ei)" + +#~ msgid "Detach window from tiled frame" +#~ msgstr "Irroita ikkuna laatoitetusta kehyksestä" + +# +#~ msgid "New workspace" +#~ msgstr "Uusi työpöytä" + +#~ msgid "New empty workspace" +#~ msgstr "Uusi tyhjä työpöytä" + +# +#~ msgid "Close workspace" +#~ msgstr "Sulje työpöytä" + #~ msgid "Could not find a complete workspace class. Please load some modules." #~ msgstr "" #~ "Yhtäkään täydellistä työpöytäluokkaa ei löydy. Ole hyvä ja lataa joitakin " @@ -1678,8 +1736,8 @@ msgstr "%s %s osassa %s" #~ msgid "Restart PWM" #~ msgstr "Käynnistä PWM" -#~ msgid "Refresh list" -#~ msgstr "Virkistä lista" +msgid "Refresh list" +msgstr "Virkistä lista" #~ msgid "Unable to create workspace: no screen." #~ msgstr "Ei voida luoda työpöytää: ei ruutua." diff --git a/po/ru.po b/po/ru.po deleted file mode 100644 index 01d0a08..0000000 --- a/po/ru.po +++ /dev/null @@ -1,1637 +0,0 @@ -# translation of ru.po to RUSSIAN -# # -# This file is distributed under the same license as the Ion3 package. -# Vassily Leushin , 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 \n" -"Language-Team: RUSSIAN \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 "óÐÉÓÏË" - diff --git a/pwm/cfg_pwm.lua b/pwm/cfg_pwm.lua index 805daf0..97026b2 100644 --- a/pwm/cfg_pwm.lua +++ b/pwm/cfg_pwm.lua @@ -50,16 +50,16 @@ dopath("mod_dock") -- --- Unbind anything using mod_query and rebinding to mod_menu where +-- Unbind anything using mod_query and rebind to mod_menu where -- applicable. defbindings("WScreen", { + bdoc("Display the main menu."), kpress(ALTMETA.."F12", "mod_menu.menu(_, _sub, 'mainmenu', {big=true})"), }) defbindings("WMPlex.toplevel", { kpress(ALTMETA.."F1", nil), - kpress(META.. "F1", "ioncore.exec_on(_, ':man pwm3')"), kpress(ALTMETA.."F3", nil), kpress(META.. "F3", nil), kpress(ALTMETA.."F4", nil), @@ -67,11 +67,16 @@ defbindings("WMPlex.toplevel", { kpress(ALTMETA.."F6", nil), kpress(ALTMETA.."F9", nil), kpress(META.."G", nil), - kpress(META.."A", nil), + + bdoc("Show the PWM manual page."), + kpress(META.. "F1", "ioncore.exec_on(_, ':man pwm3')"), + + bdoc("Display context menu."), + kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"), }) -defbindings("WFrame", { - kpress(META.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"), +defbindings("WFrame.toplevel", { + kpress(META.."A", nil), }) -- Make a new main menu with additional workspace menu. diff --git a/pwm/pwm.c b/pwm/pwm.c index c4a0804..a96e306 100644 --- a/pwm/pwm.c +++ b/pwm/pwm.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include diff --git a/version.h b/version.h index 31b30f5..d33136a 100644 --- a/version.h +++ b/version.h @@ -1,2 +1,2 @@ -#define ION_VERSION "3ds-20070318" +#define ION_VERSION "3rc-20070506" #define ION_API_VERSION "3-"ION_VERSION