]> git.decadent.org.uk Git - ion3.git/commitdiff
[svn-upgrade] Integrating new upstream version, ion3 (20070608) 20070608
authorBen Hutchings <ben@decadent.org.uk>
Wed, 27 Jun 2007 22:02:56 +0000 (22:02 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 27 Jun 2007 22:02:56 +0000 (22:02 +0000)
62 files changed:
ChangeLog
LICENSE
RELNOTES
doc/ChangeLog
doc/exact-version
doc/ionconf.dvi.gz
doc/ionconf.ps.gz
doc/ionconf.tex
doc/ionconf/images.log
doc/ionconf/images.tex
doc/ionconf/img1.png
doc/ionconf/img2.png
doc/ionconf/img3.png
doc/ionconf/img4.png
doc/ionconf/img5.png
doc/ionconf/img6.png
doc/ionconf/index.html
doc/ionconf/ionconf.html
doc/ionconf/node11.html
doc/ionconf/node13.html
doc/ionconf/node7.html
doc/ionnotes.dvi.gz
doc/ionnotes.ps.gz
doc/ionnotes/node9.html
etc/cfg_ion.lua
etc/look_newviolet.lua
etc/lookcommon_clean.lua
exact-version
ioncore/exec.c
ioncore/frame-pointer.c
ioncore/group.c
ioncore/ioncore.c
ioncore/ioncore_bindings.lua
ioncore/kbresize.c
ioncore/key.c
ioncore/mplex.c
ioncore/mplex.h
ioncore/mplexpholder.c
ioncore/mplexpholder.h
ioncore/selection.c
ioncore/stacking.c
libmainloop/signal.c
libmainloop/signal.h
man/ion3.cs.in
man/ion3.fi.in
man/ion3.in
mod_query/listing.c
mod_query/listing.h
mod_query/wedln.c
mod_sp/main.c
mod_statusbar/ion-statusd/ion-statusd.c
mod_statusbar/ion-statusd/statusd_load.lua
mod_statusbar/main.c
mod_statusbar/mod_statusbar.lua
mod_tiling/split.c
mod_tiling/tiling.c
po/Makefile
po/fr.po [new file with mode: 0644]
system.mk
utils/ion-completefile/Makefile
utils/ion-completefile/ion-completefile.c
version.h

index 4410265957f2f2df9c909e9851373214fd376edd..0bbfa9c1c3e55a65c7966d1e231afe6a713de38a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,154 @@
+2007-06-08 16:55 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-3rc-20070608
+
+2007-06-08 16:55 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Release notes
+
+2007-06-08 16:04 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Bah, too many indirect deps from Xmu; reimplement the wh^Wmacros.
+
+2007-06-08 15:57 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * X selection code tuning
+
+2007-06-06 18:10 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Use getloadavg(3) instead of /proc/loadavg or `uptime` in statusd.
+
+2007-06-05 19:21 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Updated configuration document name in man pages
+
+2007-06-05 15:15 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed release from Ion ION_API_VERSION
+  (It should be "stable", so modules don't have to be checked to
+  be compiled against the exact release.)
+
+2007-06-04 06:32 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed uninitialised variables
+
+2007-05-30 18:12 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed stdisp split tree node dodging
+
+2007-05-29 21:09 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Oops, hidden and pseudomodal flags used the same bit
+
+2007-05-28 19:59 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Document 'bottom' parameter to WGroup.attach_new
+
+2007-05-28 17:50 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Don't redraw full listing on completion cycle
+
+2007-05-28 08:14 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Bah, removed redundant statement
+
+2007-05-26 14:08 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * fix
+
+2007-05-26 14:00 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * More name policy refinements
+  (Removed "ion soup" and replaced with explicit patch requests 
+  by the user.)
+
+2007-05-24 20:57 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Use clock_gettime(CLOCK_MONOTONIC) when available.
+  
+  *nix provides only one interval timer (or 'select' timeout), so programs
+  with multiple timers need to do their own timeout management. This means
+  converting the times from delays to absolute times. When gettimeofday is
+  used, the time thus provided is not guaranteed to be monotonic, and may
+  be adjusted backwards, which is a serious problem. The CLOCK_MONOTONIC
+  time advanced monotonically from an unspecified starting point, thus 
+  providing exactly what is needed for decent timeout management.
+  
+  This partially fixes issues with e.g. statusbar updates when time is
+  adjusted backwards. If CLOCK_MONOTONIC is not available, the issue 
+  remains, as I can't be arsed to write ugly countermeasures against 
+  the lack of an absolutely _essential_ feature that every system that
+  is not totally moronic, should have had to begin with. (I should also
+  be just using the rather nice libevent that I just learned about 
+  instead of my own mainloop library... but since there's a feature 
+  freeze and the conversion would be quite a bit of work that could 
+  induce new bugs, it isn't happening for Ion3.)
+
+2007-05-21 18:27 UTC  Pierre-Henri RAMBOZ DidouPh@gmail.com
+  * Added French translation
+
+2007-05-21 13:55 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * set_stdisp doc update
+
+2007-05-20 19:37 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Some "clean" style tuning
+
+2007-05-20 19:19 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added $(C99_SOURCE) to ion-completefile CFLAGS
+
+2007-05-20 17:09 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Don't start statusd in quiet mode
+  (non-statusd meters are also auto-loaded these days, so it might just
+  as well complain of meters not found.)
+
+2007-05-20 17:07 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Made statusd startup timeout non-fatal
+
+2007-05-20 14:58 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * popen_bgread doc improvement
+
+2007-05-18 07:03 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Some improvements to name policy explanations
+
+2007-05-17 16:51 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Don't check for pointer in tab-bar when disabled.
+  While the bar has no geometry when disabled, the Fitt's Law
+  hack for top of the screen borders was still functional.
+
+2007-05-17 16:44 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * ioncore.popen_bgread doc fix
+
+2007-05-14 16:13 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Ungrabbed submaps had stopped working. Fixed.
+
+2007-05-12 19:21 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Missing stdio.h header in ion-completefile
+
+2007-05-12 14:25 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * WTF is strcasecmp doing in strings.h and not string.h on some systems?
+
+2007-05-10 13:39 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Removed references to no longer existent layers
+
+2007-05-08 22:41 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * A bit more better wording
+
+2007-05-08 16:01 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed unsplit
+
+2007-05-08 15:56 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed tiling emergency restore code
+
+2007-05-08 15:25 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Binding fn. doc. fixes
+
+2007-05-08 15:23 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * "Improved" stacking traversal code wasn't considering fallback.
+
+2007-05-07 20:55 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Do not use `which lua5.1` in system.mk examples.
+  Makes for confusing error messages if not found.
+
+2007-05-07 15:49 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Do not try to automatically launch statusd if config file launch fails
+
+2007-05-07 15:22 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Fixed statusd-not-found message
+
+2007-05-07 08:34 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Doc. notation fix
+
+2007-05-07 08:31 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Added some documentation and commented-out settings to cfg_ion.lua
+
+2007-05-06 20:50 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  * Better wording of name policy
+  (Author instead of copyright/trademark holder.)
+
 2007-05-06 14:43 UTC  Tuomo Valkonen <tuomov@iki.fi>
   tagged ion-3rc-20070506
 
diff --git a/LICENSE b/LICENSE
index b5cf6d283c53609af6ca35c4c8fa9233e22be16b..c4ba1e8c8fadbad11089c5a49ef02ceea6c44c01 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -4,38 +4,50 @@ 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.
+the name of the project, Ion(tm), names of particular "branches" such as
+Ion3(tm), and other derived names:
+
+  If the name Ion(tm) or other names that can be associated with the Ion
+  project are used to distribute this software, then:
+
+    - A version that does not significantly differ from one of the
+      original author's versions must be provided by default. 
+
+    - When there are no further prominent notices of possible out-datedness, 
+      and no prominent original author's version qualifiers present (resp. 
+      only branch qualifier is present), then the version distributed online
+      may not significantly differ from the original author's latest stable
+      release (resp. latest release on the branch) within a reasonable delay
+      (normally 28 days). The holders of physical distribution media must 
+      be provided ways to upgrade to the latest release within this delay.
+
+    - Significantly altered versions may be provided only if the user
+      explicitly requests for those modifications to be applied, and 
+      is prominently notified that the software is no longer considered 
+      the standard version, and is not supported by the original author. 
+      The version string displayed by the program must describe these
+      modifications and the "support void" status.
+
+  Derived works that do not satisfy the above terms must be renamed so
+  that they can not be associated with the Ion project, their executables
+  must be given names that do not conflict with the original author's 
+  version, and this author 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 original
+  author. If "Ion" occurs in the name, it must be in the form
+  "Foo for Ion" instead of "Ion Foo", etc.
+
+  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 original author 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.
+
+  If you fail to follow these terms, you lose the rights granted to
+  you by the LGPL.
 
 Explanations:
 
@@ -44,18 +56,28 @@ 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
+Everything else is significant. The author 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.
+provides an `installpkg` command for installing packages. Then the action
+`installpkg ion3` (resp. `installpkg ion`) should within a reasonable 
+delay install the latest release of Ion3 (resp. the latest stable release),
+or prominently notify the user that the provided version is not or may not
+be the latest. The action `installpkg ion-3ds-20070318` may at any date 
+install this particular mentioned release. Likewise, the action `installpkg
+--support-void-featurex ion3` may apply additional patches to the latest
+Ion3, within the further constraints set above.
+
+The intent of these terms is to curb the power that "distributions", as
+the primary sources of software for many users, have in defining what
+is perceived as Ion. By providing significantly modified versions and
+out-dated development snapshots without prominently mentioning this fact,
+they do not present the work in a light that the author can agree with,
+and create a burden of dealing with (new) users seeking for support for
+such versions.
+
 
 ---
 
index 4a3998e7013d763d3311c62a37804662a4fe39d8..842c6b634b0af00cc71c0ced009abb3839fe9d4e 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -1,4 +1,11 @@
 
+ion-3rc-20070608
+----------------
+
+This is the second "rc" release, and contains primarily bug fixes
+and other minor improvements.
+
+
 ion-3rc-20070506
 ----------------
 
index c73b31603bf2f908fc7efc05cd4da3c2d29eb594..221c8d8f18455440d560ce9f8d23279863e70b8f 100644 (file)
@@ -1,3 +1,6 @@
+2007-06-08 16:58 UTC  Tuomo Valkonen <tuomov@iki.fi>
+  tagged ion-doc-3rc-20070608
+
 2007-05-06 14:40 UTC  Tuomo Valkonen <tuomov@iki.fi>
   tagged ion-doc-3rc-20070506
 
index 8549f120f51ff6dae58ff99f2f0e0f9c95602386..1cad080d56a205571ab8ec6af65510d632ff1e28 100644 (file)
@@ -1,5 +1,5 @@
 
 Context:
 
-[TAG ion-doc-3rc-20070506
-Tuomo Valkonen <tuomov@iki.fi>**20070506144001] 
+[TAG ion-doc-3rc-20070608
+Tuomo Valkonen <tuomov@iki.fi>**20070608165851] 
index f7e0ba99fa0e4f963aeb71929495da5ca3e9c06b..9443df705fbd7b9f695a3c44bad5bd0441fdb6e8 100644 (file)
Binary files a/doc/ionconf.dvi.gz and b/doc/ionconf.dvi.gz differ
index c59b71a2975da81af6c57321c5d3d3dce49a4112..0bd7cfbf327da54fc5551168c4c8ca7cbd707b7b 100644 (file)
Binary files a/doc/ionconf.ps.gz and b/doc/ionconf.ps.gz differ
index 1bd52af2a701074c6001835555d3354bb2e9d2af..30fb07a90e8686acda05ba4f849823083dba4681 100644 (file)
@@ -10,7 +10,7 @@
 
 \title{Configuring and extending Ion3 with Lua}
 \author{Tuomo Valkonen \\ tuomov at iki.fi}
-\date{2007-05-06}
+\date{2007-06-08}
 
 \makeindex
 
index aee5f70c487ba84226e8bfb6fe813e474ef17e8f..e931a23c35b29b66a3284341962114d465f66789 100644 (file)
@@ -1,4 +1,4 @@
-This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2007.4.8)  6 MAY 2007 17:46
+This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2007.4.8)  8 JUN 2007 20:00
 entering extended mode
 **./images.tex
 (./images.tex
@@ -369,17 +369,17 @@ l2hSize :tex2html_wrap_inline2241:8.7125pt::8.7125pt::23.6642pt.
 
 
 ]
-l2hSize :tex2html_wrap_inline5502:7.5626pt::7.5626pt::14.53923pt.
+l2hSize :tex2html_wrap_inline5512:7.5626pt::7.5626pt::14.53923pt.
 [4
 
 
 ]
-l2hSize :tex2html_wrap_inline5504:7.5626pt::7.5626pt::14.53923pt.
+l2hSize :tex2html_wrap_inline5514:7.5626pt::7.5626pt::14.53923pt.
 [5
 
 
 ]
-l2hSize :tex2html_wrap_inline7754:8.7125pt::8.7125pt::86.9574pt.
+l2hSize :tex2html_wrap_inline7764:8.7125pt::8.7125pt::86.9574pt.
 [6
 
 
@@ -387,7 +387,7 @@ l2hSize :tex2html_wrap_inline7754:8.7125pt::8.7125pt::86.9574pt.
 Here is how much of TeX's memory you used:
  4467 strings out of 94501
  63452 string characters out of 1175795
- 123525 words of memory out of 1000000
+ 123527 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
index 2912e907b556ff3d725745a588018db4b5d3acb8..4906f84ab0ddc59926a85450c0ec636fe941d4d9 100644 (file)
@@ -82,7 +82,7 @@
 
 \title{Configuring and extending Ion3 with Lua}
 \author{Tuomo Valkonen \\tuomov at iki.fi}
-\date{2007-05-06}
+\date{2007-06-08}
 
 
 \makeindex
@@ -325,13 +325,13 @@ $(0, 1]$%
 \stepcounter{subsection}
 \stepcounter{subsection}
 {\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline5502}%
+\lthtmlinlinemathA{tex2html_wrap_inline5512}%
 $-1$%
 \lthtmlinlinemathZ
 \lthtmlcheckvsize\clearpage}
 
 {\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline5504}%
+\lthtmlinlinemathA{tex2html_wrap_inline5514}%
 $-2$%
 \lthtmlinlinemathZ
 \lthtmlcheckvsize\clearpage}
@@ -361,7 +361,7 @@ $-2$%
 \stepcounter{section}
 \stepcounter{subsection}
 {\newpage\clearpage
-\lthtmlinlinemathA{tex2html_wrap_inline7754}%
+\lthtmlinlinemathA{tex2html_wrap_inline7764}%
 $\{t,m,b\}\times\{t,c,b\}$%
 \lthtmlinlinemathZ
 \lthtmlcheckvsize\clearpage}
index 9d458d5539b431f6bef3387b0f39772ee459f8dc..ef6ac054b44006622227e1f301276358a98e0745 100644 (file)
Binary files a/doc/ionconf/img1.png and b/doc/ionconf/img1.png differ
index d68136459c7deaf4d33aa93f958a9d50fddfeaa1..fbbef0cbc93235040083bf243ade45601d3407c0 100644 (file)
Binary files a/doc/ionconf/img2.png and b/doc/ionconf/img2.png differ
index 38071fed0798e8e455fd66b91ac45682e6129169..4f60c17b24867dbba31f586114f604b5372582b9 100644 (file)
Binary files a/doc/ionconf/img3.png and b/doc/ionconf/img3.png differ
index 3d3a3ef0ef82c58e701a42910f509f80f06bbc30..17e520f96e87b834d6f9594ffc2db4bc411a4786 100644 (file)
Binary files a/doc/ionconf/img4.png and b/doc/ionconf/img4.png differ
index 38fbe56f6cb1f56f04d5286189a64d4dc58ddfa1..eab008484af526c35cfff5517e98a489695c9bb0 100644 (file)
Binary files a/doc/ionconf/img5.png and b/doc/ionconf/img5.png differ
index 3601ccb5a58f67e073e54ac82fd6af3103b24e3d..c7c8364ae6ae38d845266698574743e49e227cd8 100644 (file)
Binary files a/doc/ionconf/img6.png and b/doc/ionconf/img6.png differ
index 47831079372a877cf6ff8da365c9de88d035a8bf..7bc2dead8f7bf9aa20554a90c1ec325207c951e8 100644 (file)
@@ -57,7 +57,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 
 <P ALIGN="CENTER"><STRONG>Tuomo Valkonen</STRONG></P>
 <P ALIGN="CENTER"><I>tuomov at iki.fi</I></P>
-<P ALIGN="CENTER"><STRONG>2007-05-06</STRONG></P>
+<P ALIGN="CENTER"><STRONG>2007-06-08</STRONG></P>
 </DIV>
 
 <P>
index 47831079372a877cf6ff8da365c9de88d035a8bf..7bc2dead8f7bf9aa20554a90c1ec325207c951e8 100644 (file)
@@ -57,7 +57,7 @@ original version by:  Nikos Drakos, CBLU, University of Leeds
 
 <P ALIGN="CENTER"><STRONG>Tuomo Valkonen</STRONG></P>
 <P ALIGN="CENTER"><I>tuomov at iki.fi</I></P>
-<P ALIGN="CENTER"><STRONG>2007-05-06</STRONG></P>
+<P ALIGN="CENTER"><STRONG>2007-06-08</STRONG></P>
 </DIV>
 
 <P>
index 98036497d8396f95001a0c2bd580b172eac576bd..e81317d4b52bcceb6824b638ffcff07923e29d27 100644 (file)
@@ -72,13 +72,13 @@ Index</A>
 <DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1473"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
 </DL>
 <DD><STRONG><TT>clientwin_do_manage_alt</TT></STRONG>
- : <A HREF="node7.html#8232"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8242"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>clientwin_mapped_hook</TT></STRONG>
- : <A HREF="node7.html#8233"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8243"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>clientwin_property_change_hook</TT></STRONG>
- : <A HREF="node7.html#8234"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8244"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>clientwin_unmapped_hook</TT></STRONG>
- : <A HREF="node7.html#8235"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8245"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><SPAN  CLASS="textbf">Control</SPAN></STRONG>
  : <A HREF="node4.html#879"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><TT>defmenu</TT></STRONG>
@@ -90,7 +90,7 @@ Index</A>
 <DD><STRONG><TT>float</TT></STRONG>
  : <A HREF="node4.html#1452"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><TT>frame_managed_changed_hook</TT></STRONG>
- : <A HREF="node7.html#8236"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8246"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>fullscreen</TT></STRONG>
  : <A HREF="node4.html#1453"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><TT>ignore_resizeinc</TT></STRONG>
@@ -108,15 +108,15 @@ Index</A>
 <DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1475"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
 </DL>
 <DD><STRONG><TT>ioncore_deinit_hook</TT></STRONG>
- : <A HREF="node7.html#8238"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8248"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>ioncore_post_layout_setup_hook</TT></STRONG>
- : <A HREF="node7.html#8239"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8249"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>ioncore_sigchld_hook</TT></STRONG>
- : <A HREF="node7.html#8237"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8247"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>ioncore_snapshot_hook</TT></STRONG>
- : <A HREF="node7.html#8240"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8250"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>ioncore_submap_ungrab_hook</TT></STRONG>
- : <A HREF="node7.html#8241"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8251"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>is_dockapp</TT></STRONG><DL>
 <DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1478"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
 </DL>
@@ -157,9 +157,9 @@ Index</A>
 <DD><STRONG><TT>PREFIX</TT></STRONG>
  : <A HREF="node4.html#582"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 <DD><STRONG><TT>region_do_warp_alt</TT></STRONG>
- : <A HREF="node7.html#8243"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8253"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>region_notify_hook</TT></STRONG>
- : <A HREF="node7.html#8245"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8255"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><TT>role</TT></STRONG><DL>
 <DD><STRONG>winprop</STRONG> : <A HREF="node4.html#1474"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">2</SPAN></A>
 </DL>
@@ -170,7 +170,7 @@ Index</A>
 <DD><STRONG>X</STRONG> : <A HREF="node3.html#332"><SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">2</SPAN>.<SPAN CLASS="arabic">1</SPAN></A>
 </DL>
 <DD><STRONG><TT>screen_managed_changed_hook</TT></STRONG>
- : <A HREF="node7.html#8244"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8254"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG><SPAN  CLASS="textbf">ScrollLock</SPAN></STRONG>
  : <A HREF="node4.html#886"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><SPAN  CLASS="textbf">Shift</SPAN></STRONG>
@@ -190,7 +190,7 @@ Index</A>
 <DD><STRONG><TT>target</TT></STRONG>
  : <A HREF="node4.html#1461"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN></A>
 <DD><STRONG><TT>tiling_placement_alt</TT></STRONG>
- : <A HREF="node7.html#8242"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
+ : <A HREF="node7.html#8252"><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">9</SPAN></A>
 <DD><STRONG>transient</STRONG>
  : <A HREF="node4.html#1432"><SPAN CLASS="arabic">3</SPAN>.<SPAN CLASS="arabic">5</SPAN>.<SPAN CLASS="arabic">3</SPAN></A>
 <DD><STRONG><TT>transient_mode</TT></STRONG>
index b65d8cdc531adde3539c0b36621f4755995c4187..4ad52180b1cd355b38e2b90e222d313946772fad 100644 (file)
@@ -70,7 +70,7 @@ Mathematics Department, Macquarie University, Sydney.
 The command line arguments were: <BR>
  <STRONG>latex2html</STRONG> <TT>-show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf</TT>
 <P>
-The translation was initiated by tuomov on 2007-05-06
+The translation was initiated by tuomov on 2007-06-08
 <BR><HR>
 
 </BODY>
index 11dd84ac7f6beabb8c1ac86c3a22afa950aa48a0..7b6bec893f3711dfdc0e8270b859d0d074a1c5b0 100644 (file)
@@ -291,7 +291,7 @@ The string <TT>guard</TT>  maybe set to pose limits on <TT>_sub</TT>. Currently
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Define bindings for context <TT>context</TT>. Here <TT>binding</TT> is
  a table composed of entries created with <A HREF="#fn:ioncore.kpress"><TT>ioncore.kpress</TT></A>, 
- etc.; see section <A HREF="node4.html#sec:bindings">3.3</A> for details.
+ etc.; see Section <A HREF="node4.html#sec:bindings">3.3</A> for details.
   
 </DD>
 </DL>
@@ -1023,9 +1023,11 @@ Note that this function is asynchronous; the region will not
 
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD>Run <TT>cmd</TT> with a read pipe connected to its stdout.
- When data is received through the pipe, <TT>handler</TT> is called
- with that data.
+<DD>Run <TT>cmd</TT> with a read pipe connected to its stdout and stderr.
+ When data is received through one of these pipes, <TT>h</TT> or <TT>errh</TT> 
+ is called with that data. When the pipe is closed, the handler is called
+ with <TT>nil</TT> argument. The PID of the new process is returned, or
+ -1 on error.
   
 </DD>
 </DL>
@@ -1523,8 +1525,9 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Creates a binding description table for the action of pressing a key given 
- by <TT>keyspec</TT> (with possible modifiers) to the function <TT>func</TT>.
- For more information on bindings, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+ by <TT>keyspec</TT> (with possible modifiers) to the function <TT>cmd</TT>.
+ The <TT>guard</TT> controls when the binding can be called.
+ For more informationp see Section <A HREF="node4.html#sec:bindings">3.3</A>.
   
 </DD>
 </DL>
@@ -1539,10 +1542,10 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD>This is similar to <A HREF="#fn:kpress"><TT>kpress</TT></A> but after calling <TT>cmd</TT>, 
+<DD>This is similar to <A HREF="#fn:ioncore.kpress"><TT>ioncore.kpress</TT></A> but after calling <TT>cmd</TT>, 
  Ioncore waits for all modifiers to be released before processing
  any further actions.
- For more information on bindings, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+ For more information on bindings, see Section <A HREF="node4.html#sec:bindings">3.3</A>.
   
 </DD>
 </DL>
@@ -1604,8 +1607,8 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Creates a binding description table for the action of clicking a mouse 
  button while possible modifier keys are pressed,
- both given by <TT>buttonspec</TT>, to the function <TT>func</TT>.
- For more information, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+ both given by <TT>buttonspec</TT>, to the function <TT>cmd</TT>.
+ For more information, see Section <A HREF="node4.html#sec:bindings">3.3</A>.
   
 </DD>
 </DL>
@@ -1620,8 +1623,8 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD>Similar to <A HREF="#fn:mclick"><TT>mclick</TT></A> but for double-click.
- Also see section <A HREF="node4.html#sec:bindings">3.3</A>.
+<DD>Similar to <A HREF="#fn:ioncore.mclick"><TT>ioncore.mclick</TT></A> but for double-click.
+ Also see Section <A HREF="node4.html#sec:bindings">3.3</A>.
   
 </DD>
 </DL>
@@ -1677,8 +1680,8 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD>Similar to <A HREF="#fn:mclick"><TT>mclick</TT></A> but for just pressing the mouse button.
- Also see section <A HREF="node4.html#sec:bindings">3.3</A>.
+<DD>Similar to <A HREF="#fn:ioncore.mclick"><TT>ioncore.mclick</TT></A> but for just pressing the mouse button.
+ Also see Section <A HREF="node4.html#sec:bindings">3.3</A>.
   
 </DD>
 </DL>
@@ -1704,14 +1707,14 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <DD><A NAME="fn:ioncore.submap"></A>  
 </DD>
 <DT><STRONG>Synopsis:</STRONG></DT>
-<DD><TT>ioncore.submap(kcb_, list)</TT>
+<DD><TT>ioncore.submap(keyspec, list)</TT>
 
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
 <DD>Returns a function that creates a submap binding description table.
  When the key press action <TT>keyspec</TT> occurs, Ioncore will wait for
  a further key presse and act according to the submap.
- For details, see section <A HREF="node4.html#sec:bindings">3.3</A>.
+ For details, see Section <A HREF="node4.html#sec:bindings">3.3</A>.
   
 </DD>
 </DL>
@@ -2112,6 +2115,10 @@ When a keyboard resize function is called, and at most <TT>kbresize_t_max</TT>
 <TR><TD ALIGN="LEFT"><TT>sizepolicy</TT></TD>
 <TD ALIGN="LEFT">(string) Size policy; see Section <A HREF="#sec:sizepolicies">6.10.1</A>.</TD>
 </TR>
+<TR><TD ALIGN="LEFT"><TT>bottom</TT></TD>
+<TD ALIGN="LEFT">(boolean) Mark the attached region as the
+                 ``bottom'' of <TT>ws</TT>.</TD>
+</TR>
 </TABLE>
 
 <P>
@@ -2565,8 +2572,8 @@ In addition parameters to the region to be created are passed in this
 
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD>Returns the <TT>n</TT>:th object managed by <TT>mplex</TT> on the
<TT>l</TT>:th layer.
+<DD>Returns the <TT>n</TT>:th object on the mutually exclusive
list of <TT>mplex</TT>.
   
 </DD>
 </DL>
@@ -2640,13 +2647,16 @@ In addition parameters to the region to be created are passed in this
 <TD ALIGN="LEFT">Description</TD>
 </TR>
 <TR><TD ALIGN="LEFT"><TT>pos</TT></TD>
-<TD ALIGN="LEFT">The corner of the screen to place the status display
-               in: one of `<TT>tl</TT>', `<TT>tr</TT>', `<TT>bl</TT>' 
+<TD ALIGN="LEFT">(string) The corner of the screen to place the status 
+               display in: one of `<TT>tl</TT>', `<TT>tr</TT>', `<TT>bl</TT>' 
                or `<TT>br</TT>'.</TD>
 </TR>
+<TR><TD ALIGN="LEFT"><TT>fullsize</TT></TD>
+<TD ALIGN="LEFT">(boolean) Waste all available space.</TD>
+</TR>
 <TR><TD ALIGN="LEFT"><TT>action</TT></TD>
-<TD ALIGN="LEFT">If this field is set to `<TT>keep</TT>', <TT>corner</TT>
-                  and <TT>orientation</TT> are changed for the existing
+<TD ALIGN="LEFT">(string) If this field is set to `<TT>keep</TT>', 
+                  <TT>pos</TT> and <TT>fullsize</TT> are changed for the existing
                   status display. If this field is set to `<TT>remove</TT>',
                   the existing status display is removed. If this
                   field is not set or is set to `<TT>replace</TT>', a 
@@ -3802,7 +3812,7 @@ Note that this function is asynchronous; the region will not
 
 </DD>
 <DT><STRONG>Description:</STRONG></DT>
-<DD>Flip contents of <TT>node</TT>.
+<DD>Flip contents of <TT>split</TT>.
   
 </DD>
 </DL>
@@ -5572,8 +5582,8 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 </TR>
 <TR><TD ALIGN="LEFT"><TT>pos</TT></TD>
 <TD ALIGN="LEFT">string</TD>
-<TD ALIGN="LEFT">Position: <TT>"tl"</TT>, <TT>"tr"</TT>
-                        <TT>"bl"</TT> or <TT>"br"</TT>
+<TD ALIGN="LEFT">Position: `<TT>tl</TT>', `<TT>tr</TT>'
+                        `<TT>bl</TT>' or `<TT>br</TT>'
                         (for the obvious combinations of 
                         top/left/bottom/right).</TD>
 </TR>
@@ -5834,7 +5844,7 @@ Any parameters not explicitly set in <TT>conftab</TT> will be left unchanged.
 <P>
 
   <DL>
-<DD><A NAME="8232"></A>
+<DD><A NAME="8242"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -5906,7 +5916,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8233"></A>
+<DD><A NAME="8243"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -5926,7 +5936,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8234"></A>
+<DD><A NAME="8244"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -5947,7 +5957,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8235"></A>
+<DD><A NAME="8245"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -5968,7 +5978,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8236"></A>
+<DD><A NAME="8246"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6014,7 +6024,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8237"></A>
+<DD><A NAME="8247"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6035,7 +6045,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8238"></A>
+<DD><A NAME="8248"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6055,7 +6065,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8239"></A>
+<DD><A NAME="8249"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6076,7 +6086,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8240"></A>
+<DD><A NAME="8250"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6096,7 +6106,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8241"></A>
+<DD><A NAME="8251"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6116,7 +6126,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8242"></A>
+<DD><A NAME="8252"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6168,7 +6178,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8243"></A>
+<DD><A NAME="8253"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6189,7 +6199,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8244"></A>
+<DD><A NAME="8254"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
@@ -6211,7 +6221,7 @@ reg:attach(cwin)
 <P>
 
   <DL>
-<DD><A NAME="8245"></A>
+<DD><A NAME="8255"></A>
 
 </DD>
 <DT><STRONG>Hook name:</STRONG></DT>
index d69a4eee3d476f19cdb525978db95fb0a3990344..4a24b16c86ec778ebac81289da0da54dca045f85 100644 (file)
Binary files a/doc/ionnotes.dvi.gz and b/doc/ionnotes.dvi.gz differ
index 1180c8ada1c20982cbe5734b15d1255540ff1a89..fa9e0b05f7624dbf47b570a5790a5d508be2f3e6 100644 (file)
Binary files a/doc/ionnotes.ps.gz and b/doc/ionnotes.ps.gz differ
index 288d58959e47592cac2074d11aae092819814f40..3f29d03c619f47b6ad0bf8f81adbc33d32fc2f93 100644 (file)
@@ -70,7 +70,7 @@ Mathematics Department, Macquarie University, Sydney.
 The command line arguments were: <BR>
  <STRONG>latex2html</STRONG> <TT>-show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 4 ionnotes</TT>
 <P>
-The translation was initiated by tuomov on 2007-05-06
+The translation was initiated by tuomov on 2007-06-08
 <BR><HR>
 
 </BODY>
index 790cc46fa2178ba8843a5aad4829944ed133dfaa..726d6546768c97e447bdc129d6c4b13b2d09290a 100644 (file)
@@ -32,6 +32,20 @@ ioncore.set{
     -- Movement commands warp the pointer to frames instead of just
     -- changing focus. Enabled by default.
     --warp=true,
+    
+    -- Switch frames to display newly mapped windows
+    --switchto=true,
+    
+    -- Default index for windows in frames: one of 'last', 'next' (for
+    -- after current), or 'next-act' (for after current and anything with
+    -- activity right after it).
+    --frame_default_index='next',
+    
+    -- Auto-unsqueeze transients/menus/queries.
+    --unsqueeze=true,
+    
+    -- Display notification tooltips for activity on hidden workspace.
+    --screen_notify=true,
 }
 
 
@@ -39,6 +53,8 @@ ioncore.set{
 -- commented out below, except mod_dock. If you do not want to load
 -- something, comment out this line, and uncomment the lines corresponding
 -- the the modules or configuration files that you want, below.
+-- The modules' configuration files correspond to the names of the 
+-- modules with 'mod' replaced by 'cfg'.
 dopath("cfg_defaults")
 
 -- Load configuration of the Ion 'core'
index 5647d5e70ea8f640f9d008587f8a85150b444583..598dabc2fffb8a762f31e09809bbc9d6e3359b71 100644 (file)
@@ -77,14 +77,9 @@ de.defstyle("frame", {
     border_sides = "all",
 })
 
-de.defstyle("frame-transient", {
-    bar = "none",
-    padding_pixels = 1,
-})
-
 
 dopath("lookcommon_clean")
 
-    
+
 -- Refresh objects' brushes.
 gr.refresh()
index 49bf70af24fb4b10fb18429c5fb7316b657c8f87..6ffb7b45e0618ea8c1b14bd33eb96d8e4ba5f483 100644 (file)
@@ -10,12 +10,12 @@ de.defstyle("frame", {
         -- For user scripts
         padding_colour = "#009010",
     }),
+    padding_pixels = 1,
 })
 
 de.defstyle("frame-tiled", {
     shadow_pixels = 0,
     highlight_pixels = 0,
-    padding_pixels = 1,
     spacing = 1,
 })
 
@@ -28,6 +28,11 @@ de.defstyle("frame-floating", {
     padding_pixels = 0,
 })
 
+de.defstyle("frame-transient", {
+    bar = "none",
+    padding_pixels = 0,
+})
+
 
 de.defstyle("actnotify", {
     shadow_colour = "#c04040",
index 09adb2058833bee3df28569e250871f5d1ad4937..7bf3474237707ff76fe4df4cdadf6269dde0dda0 100644 (file)
@@ -1,5 +1,5 @@
 
 Context:
 
-[TAG ion-3rc-20070506
-Tuomo Valkonen <tuomov@iki.fi>**20070506144318
+[TAG ion-3rc-20070608
+Tuomo Valkonen <tuomov@iki.fi>**20070608165559
index 65683dc87080bb58aab95629a4e07cf00853f5fe..97f33b3068401f616a1d65bf4bf3dd08a9bc59d3 100644 (file)
@@ -123,9 +123,11 @@ int ioncore_exec(const char *cmd)
 
 
 /*EXTL_DOC
- * Run \var{cmd} with a read pipe connected to its stdout.
- * When data is received through the pipe, \var{handler} is called
- * with that data.
+ * Run \var{cmd} with a read pipe connected to its stdout and stderr.
+ * When data is received through one of these pipes, \var{h} or \var{errh} 
+ * is called with that data. When the pipe is closed, the handler is called
+ * with \code{nil} argument. The PID of the new process is returned, or
+ * -1 on error.
  */
 EXTL_SAFE
 EXTL_EXPORT
index 494a7b2a3f5b54082afce1a400bbfb94e778666f..a99d0c6573d617b7280412340e671f23b15888f9 100644 (file)
@@ -63,7 +63,8 @@ int frame_press(WFrame *frame, XButtonEvent *ev, WRegion **reg_ret)
         g.y=0;
     }
 
-    if(rectangle_contains(&g, ev->x, ev->y)){
+    if(frame->barmode!=FRAME_BAR_NONE && 
+       rectangle_contains(&g, ev->x, ev->y)){
         p_tabnum=frame_tab_at_x(frame, ev->x);
 
         region_rootpos((WRegion*)frame, &p_tab_x, &p_tab_y);
index 9c67348fe2a26442a696def5b14523ec2c55bfd7..6bfdd9ff86b74b5a7df60039ca08ceb818f40334 100644 (file)
@@ -825,6 +825,8 @@ WRegion *group_attach(WGroup *ws, WRegion *reg, ExtlTab param)
  *  \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}. \\
+ *  \var{bottom} & (boolean) Mark the attached region as the
+ *                 ``bottom'' of \var{ws}. \\
  * \end{tabularx}
  * 
  * In addition parameters to the region to be created are passed in this 
index 097801d342f2f9c1136c504f423f0846887eb841..0f1744c640636f82f8d828e754197288a56ee147 100644 (file)
@@ -11,6 +11,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <string.h>
+#include <strings.h>
 #include <errno.h>
 #include <sys/types.h>
 #include <ctype.h>
index aa52c74ff5ac436ae413132fe238a7e8fb434edf..5f11967db2f52b76abafe5970920a4b24d4865ea 100644 (file)
@@ -110,29 +110,30 @@ end
 -- Returns a function that creates a submap binding description table.
 -- When the key press action \var{keyspec} occurs, Ioncore will wait for
 -- a further key presse and act according to the submap.
--- For details, see section \ref{sec:bindings}.
-function ioncore.submap(kcb_, list)
+-- For details, see Section \ref{sec:bindings}.
+function ioncore.submap(keyspec, list)
     if not list then
         return function(lst)
-                   return submap(kcb_, lst)
+                   return submap(keyspec, lst)
                end
     end
-    return {action = "kpress", kcb = kcb_, submap = list}
+    return {action = "kpress", kcb = keyspec, submap = list}
 end
 
 --DOC
 -- Creates a binding description table for the action of pressing a key given 
--- by \var{keyspec} (with possible modifiers) to the function \var{func}.
--- For more information on bindings, see section \ref{sec:bindings}.
+-- by \var{keyspec} (with possible modifiers) to the function \var{cmd}.
+-- The \var{guard} controls when the binding can be called.
+-- For more informationp see Section \ref{sec:bindings}.
 function ioncore.kpress(keyspec, cmd, guard)
     return putcmd(cmd, guard, {action = "kpress", kcb = keyspec})
 end
 
 --DOC
--- This is similar to \fnref{kpress} but after calling \var{cmd}, 
+-- This is similar to \fnref{ioncore.kpress} but after calling \var{cmd}, 
 -- Ioncore waits for all modifiers to be released before processing
 -- any further actions.
--- For more information on bindings, see section \ref{sec:bindings}.
+-- For more information on bindings, see Section \ref{sec:bindings}.
 function ioncore.kpress_wait(keyspec, cmd, guard)
     return putcmd(cmd, guard, {action = "kpress_wait", kcb = keyspec})
 end
@@ -167,22 +168,22 @@ end
 --DOC
 -- Creates a binding description table for the action of clicking a mouse 
 -- button while possible modifier keys are pressed,
--- both given by \var{buttonspec}, to the function \var{func}.
--- For more information, see section \ref{sec:bindings}.
+-- both given by \var{buttonspec}, to the function \var{cmd}.
+-- For more information, see Section \ref{sec:bindings}.
 function ioncore.mclick(buttonspec, cmd, guard)
     return mact("mclick", buttonspec, cmd, guard)
 end
 
 --DOC
--- Similar to \fnref{mclick} but for double-click.
--- Also see section \ref{sec:bindings}.
+-- Similar to \fnref{ioncore.mclick} but for double-click.
+-- Also see Section \ref{sec:bindings}.
 function ioncore.mdblclick(buttonspec, cmd, guard)
     return mact("mdblclick", buttonspec, cmd, guard)
 end
 
 --DOC
--- Similar to \fnref{mclick} but for just pressing the mouse button.
--- Also see section \ref{sec:bindings}.
+-- Similar to \fnref{ioncore.mclick} but for just pressing the mouse button.
+-- Also see Section \ref{sec:bindings}.
 function ioncore.mpress(buttonspec, cmd, guard)
     return mact("mpress", buttonspec, cmd, guard)
 end
@@ -200,7 +201,7 @@ end
 --DOC
 -- Define bindings for context \var{context}. Here \var{binding} is
 -- a table composed of entries created with \fnref{ioncore.kpress}, 
--- etc.; see section \ref{sec:bindings} for details.
+-- etc.; see Section \ref{sec:bindings} for details.
 function ioncore.defbindings(context, bindings)
     local function filterdoc(b)
         local t={}
index 0a4e951f74a6e83c6e5e6a0cd5909a6b5c143636..f91821ca5864eaebffd9c46004bd6f60cc2291f1 100644 (file)
@@ -98,7 +98,8 @@ void moveresmode_accel(WMoveresMode *mode, int *wu, int *hu, int accel_mode)
     struct timeval tv;
     long adiff, udiff;
     
-    gettimeofday(&tv, NULL);
+    if(mainloop_gettime(&tv)!=0)
+        return;
     
     adiff=tvdiffmsec(&tv, &last_action_tv);
     udiff=tvdiffmsec(&tv, &last_update_tv);
index 4134ab77f2abdd158181472e9ff471d38613b5cb..ad7d179ffef6d51ee2df288b9e65fbdf043a0f54 100644 (file)
@@ -223,7 +223,7 @@ bool ioncore_current_key(uint *kcb, uint *state, bool *sub)
 }
 
 
-enum{GRAB_NONE, GRAB_SUBMAP, GRAB_WAITRELEASE};
+enum{GRAB_NONE, GRAB_NONE_SUBMAP, GRAB_SUBMAP, GRAB_WAITRELEASE};
 
 
 static WBinding *lookup_binding_(WRegion *reg, 
@@ -316,7 +316,7 @@ static int do_key(WRegion *oreg, XKeyEvent *ev)
                                      oreg->submapstat, 
                                      &binding_owner, &subreg);
                 
-                ret=(grabbed ? GRAB_SUBMAP : GRAB_NONE);
+                ret=(grabbed ? GRAB_SUBMAP : GRAB_NONE_SUBMAP);
             }
         }else{
             call=binding;
@@ -403,6 +403,8 @@ void ioncore_do_handle_keypress(XKeyEvent *ev)
                 submapgrab(reg);
             else if(grab==GRAB_WAITRELEASE)
                 waitrelease(reg);
+            else if(grab==GRAB_NONE_SUBMAP)
+                /* nothing */;
             else if(grab==GRAB_NONE && reg->submapstat!=NULL)
                 clear_subs(reg);
         }
index 71943a4595ca6829fe6da5ea8b267669eb3fe320..013917615513532b7740835337589b4c91fa8e4f 100644 (file)
@@ -231,8 +231,8 @@ WRegion *mplex_mx_current(WMPlex *mplex)
 
 
 /*EXTL_DOC
- * Returns the \var{n}:th object managed by \var{mplex} on the
- * \var{l}:th layer.
+ * Returns the \var{n}:th object on the mutually exclusive
+ * list of \var{mplex}.
  */
 EXTL_SAFE
 EXTL_EXPORT_MEMBER
@@ -1382,7 +1382,6 @@ WRegion *mplex_attach_simple(WMPlex *mplex, WRegion *reg, int flags)
 static void get_params(WMPlex *mplex, ExtlTab tab, int mask,
                        WMPlexAttachParams *par)
 {
-    int layer=1;
     int tmp;
     char *tmpstr;
     int ok=~mask;
@@ -1772,11 +1771,12 @@ 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 \codestr{tl}, \codestr{tr}, \codestr{bl} 
+ *   \var{pos} & (string) The corner of the screen to place the status 
+ *               display 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
+ *   \var{fullsize} & (boolean) Waste all available space. \\
+ *   \var{action} & (string) If this field is set to \codestr{keep}, 
+ *                  \var{pos} and \var{fullsize} are changed for the existing
  *                  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 \codestr{replace}, a 
index 08289f0fda6fdde30f65f8b3e09dd7e9a05fc716..455c75b230f2d85ee150ae1603a1d514e131ed91 100644 (file)
@@ -30,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_PSEUDOMODAL  0x0004 /* pseudomodal (if modal) */
+#define MPLEX_ATTACH_PSEUDOMODAL  0x0008 /* pseudomodal (if modal) */
 #define MPLEX_ATTACH_LEVEL        0x0010 /* level field set */
 #define MPLEX_ATTACH_GEOM         0x0020 /* geometry field is set */
 #define MPLEX_ATTACH_SIZEPOLICY   0x0040 /* size policy field is set */
index 623b60ac45a353d452574f35ff52b89b85874deb..c3a57ce5979b178fe5415c2d6f6278d4bdd7609d 100644 (file)
@@ -183,7 +183,7 @@ void mplexpholder_deinit(WMPlexPHolder *ph)
 /*}}}*/
 
 
-/*{{{ Move, attach, layer */
+/*{{{ Move, attach */
 
 
 typedef struct{
index be4931707c7dd27d63fa381941d30144191137bb..7528f6dfd14236886cd7682b592ae76ae75cabd0 100644 (file)
@@ -26,8 +26,7 @@ DECLCLASS(WMPlexPHolder){
 };
 
 
-/* If 'after' is set, it is used, otherwise 'or_after', 
- * and finally 'or_layer' if this is also unset
+/* If 'either_st' is set, it is used, otherwise 'or_param', is used. 
  */
 
 extern WMPlexPHolder *create_mplexpholder(WMPlex *mplex, 
@@ -39,8 +38,6 @@ extern bool mplexpholder_init(WMPlexPHolder *ph,
                               WMPlexAttachParams *or_param);
 extern void mplexpholder_deinit(WMPlexPHolder *ph);
 
-extern int mplexpholder_layer(WMPlexPHolder *ph);
-
 extern WRegion *mplexpholder_do_attach(WMPlexPHolder *ph, int flags,
                                        WRegionAttachData *data);
 
index 95bf2250fb84da167dc372fbb129774f46b36e21..9b5c39736869ed594a03ad927b5e17812b141a3f 100644 (file)
@@ -21,24 +21,67 @@ static int selection_length;
 static bool continuation_set=FALSE;
 static ExtlFn continuation;
 
+#define CLIPATOM(X) XA_PRIMARY
+
+static Atom XA_COMPOUND_TEXT(Display *unused)
+{
+    static Atom a=None;
+    
+    if(a==None)
+        a=XInternAtom(ioncore_g.dpy, "COMPOUND_TEXT", False);
+        
+    return a;
+}
+
+
 void ioncore_handle_selection_request(XSelectionRequestEvent *ev)
 {
     XSelectionEvent sev;
+    XTextProperty prop;
     const char *p[1];
+    bool ok=FALSE;
     
-    if(selection_data==NULL)
-        return;
+    sev.property=None;
+    sev.target=None;
+    
+    if(selection_data==NULL || ev->property==None)
+        goto refuse;
     
     p[0]=selection_data;
     
-    xwindow_set_text_property(ev->requestor, ev->property, p, 1);
+    if(!ioncore_g.use_mb && ev->target==XA_STRING){
+        Status st=XStringListToTextProperty((char **)&p, 1, &prop);
+        ok=st;
+    }else if(ioncore_g.use_mb){
+        XICCEncodingStyle style;
+        
+        if(ev->target==XA_STRING){
+            style=XStringStyle;
+            ok=TRUE;
+        }else if(ev->target==XA_COMPOUND_TEXT(ioncore_g.dpy)){
+            style=XCompoundTextStyle;
+            ok=TRUE;
+        }
+        
+        if(ok){
+            Status st=XmbTextListToTextProperty(ioncore_g.dpy, (char **)p, 1,
+                                                style, &prop);
+            ok=!st;
+        }
+    }
     
+    if(ok){
+        XSetTextProperty(ioncore_g.dpy, ev->requestor, &prop, ev->property);
+        sev.target=prop.encoding;
+        sev.property=ev->property;
+        XFree(prop.value);
+    }
+
+refuse:    
     sev.type=SelectionNotify;
     sev.requestor=ev->requestor;
     sev.selection=ev->selection;
-    sev.target=ev->target;
     sev.time=ev->time;
-    sev.property=ev->property;
     XSendEvent(ioncore_g.dpy, ev->requestor, False, 0L, (XEvent*)&sev);
 }
 
@@ -128,7 +171,7 @@ void ioncore_set_selection_n(const char *p, int n)
     
     XStoreBytes(ioncore_g.dpy, p, n);
     
-    XSetSelectionOwner(ioncore_g.dpy, XA_PRIMARY,
+    XSetSelectionOwner(ioncore_g.dpy, CLIPATOM(ioncore_g.dpy),
                        DefaultRootWindow(ioncore_g.dpy),
                        CurrentTime);
 }
@@ -156,15 +199,10 @@ void ioncore_request_selection_for(Window win)
         continuation_set=FALSE;
     }
     
-    if(ioncore_g.use_mb){
-#ifdef X_HAVE_UTF8_STRING
-        a=XInternAtom(ioncore_g.dpy, "UTF8_STRING", True);
-#else
-        a=XInternAtom(ioncore_g.dpy, "COMPOUND_TEXT", True);
-#endif
-    }
+    if(ioncore_g.use_mb)
+        a=XA_COMPOUND_TEXT(ioncore_g.dpy);
     
-    XConvertSelection(ioncore_g.dpy, XA_PRIMARY, a,
+    XConvertSelection(ioncore_g.dpy, CLIPATOM(ioncore_g.dpy), a,
                       ioncore_g.atom_selection, win, CurrentTime);
 }
 
index 9c0be9f02686f37db8d94e6a1ff1c84c8f04469e..c96c5387c1a914980754302389f66d95cd6259b6 100644 (file)
@@ -552,7 +552,7 @@ WStacking *stacking_find_to_focus(WStacking *stacking,
                                   void *filt_data)
 {
     uint min_level=STACKING_LEVEL_BOTTOM;
-    WStacking *st=NULL;
+    WStacking *st=NULL, *found=NULL;
     
     if(stacking==NULL)
         return NULL;
@@ -572,15 +572,21 @@ WStacking *stacking_find_to_focus(WStacking *stacking,
         
         if(st->level<min_level)
             break; /* no luck */
-            
-        if(st==to_try || cf(approve_filt, filt_data, st))
+        
+        if(st==to_try)
             return st;
             
+        if(found==NULL && cf(approve_filt, filt_data, st)){
+            found=st;
+            if(to_try==NULL)
+                break;
+        }
+            
         if(st->level>=STACKING_LEVEL_MODAL1)
             min_level=maxof(min_level, st->level);
     }while(st!=stacking);
     
-    return NULL;
+    return found;
 }
 
 
index e87e15463bc82485523a11f6558e59481516a183..f09d1db1a1b55c22037a981736c06cd1ca987cbb 100644 (file)
@@ -42,6 +42,24 @@ WHook *mainloop_sigusr2_hook=NULL;
 static WTimer *queue=NULL;
 
 
+int mainloop_gettime(struct timeval *val)
+{
+#ifdef _POSIX_MONOTONIC_CLOCK
+    struct timespec spec;
+    int ret;
+    
+    ret=clock_gettime(CLOCK_MONOTONIC, &spec);
+    
+    val->tv_sec=spec.tv_sec;
+    val->tv_usec=spec.tv_nsec/1000;
+    
+    return ret;
+#else
+    return gettimeofday(&val, NULL);
+#endif
+}
+
+
 #define TIMEVAL_LATER(a, b) \
     ((a.tv_sec > b.tv_sec) || \
     ((a.tv_sec == b.tv_sec) && \
@@ -60,7 +78,7 @@ static void do_timer_set()
     }
 
     /* Subtract queue time from current time, don't go below zero */
-    gettimeofday(&(val.it_value), NULL);
+    mainloop_gettime(&(val.it_value));
     if(TIMEVAL_LATER((queue)->when, val.it_value)){
         if(queue->when.tv_usec<val.it_value.tv_usec){
             queue->when.tv_usec+=USECS_IN_SEC;
@@ -190,7 +208,7 @@ bool mainloop_check_signals()
     /* Check for timer events in the queue */
     while(had_tmr && queue!=NULL){
         had_tmr=FALSE;
-        gettimeofday(&current_time, NULL);
+        mainloop_gettime(&current_time);
         while(queue!=NULL){
             if(TIMEVAL_LATER(current_time, queue->when)){
                 q=queue;
@@ -225,7 +243,7 @@ static void add_to_current_time(struct timeval *when, uint msecs)
 {
     long tmp_usec;
 
-    gettimeofday(when, NULL);
+    mainloop_gettime(when);
     tmp_usec=when->tv_usec + (msecs * 1000);
     when->tv_usec=tmp_usec % 1000000;
     when->tv_sec+=tmp_usec / 1000000;
index b05e20e940090d4e421c886e67495acdb85ca70a..3eaa2fed3dccd9b26a55b48073dc8260a089dfd8 100644 (file)
@@ -54,4 +54,7 @@ extern void mainloop_trap_signals(const sigset_t *set);
 extern WHook *mainloop_sigchld_hook;
 extern WHook *mainloop_sigusr2_hook;
 
+/* Returns monotonic time if possible */
+extern int mainloop_gettime(struct timeval *val);
+
 #endif /* ION_LIBMAINLOOP_SIGNAL_H */
index 4d9044fb31d4a5c91757fd83af3748c8f68a17dd..55a2de54f6757d309cdf75af0880786ba4008e94 100644 (file)
@@ -150,7 +150,7 @@ Hlavn
 .SH VIZ TAKÉ
 Domovská stránka Ionu \fIhttp://iki.fi/tuomov/ion/\fP
 .PP
-Dokument "Ion: Configuring and extending with Lua" k nalezení
+Dokument "Configuring and extending Ion3 with Lua" k nalezení
 tamté¾.
 .PP
 .I DOCDIR/
index 896a4d505d0bac77d7397508653faa734edddbee..b769d97e3fd05cd9f180a79c9d953873d37f7efb 100644 (file)
@@ -153,7 +153,7 @@ K
 .SH KATSO MYÖS
 Ionin kotisivu, \fIhttp://iki.fi/tuomov/ion/\fP (englanniksi).
 .PP
-Dokumentti "Ion: Configuring and extending with Lua" (englanniksi)
+Dokumentti "Configuring and extending Ion3 with Lua" (englanniksi)
 nähtävissä Ionin kotisivulla.
 .PP
 .I DOCDIR/
index 304498d8845b3241ee86ee17647d6b4a841dca30..6626f7aadd9c7582c8338ba5b13d679f5174526e 100644 (file)
@@ -150,7 +150,7 @@ User default main configuration file (overrides system default)
 .SH SEE ALSO
 The Ion home page, \fIhttp://iki.fi/tuomov/ion/\fP
 .PP
-The document "Ion: Configuring and extending with Lua" found on the
+The document "Configuring and extending Ion3 with Lua" found on the
 Ion home page.
 .PP
 .I DOCDIR/
index fbac450ba73ab5d7a308f1e26f9ad52b100dcb1e..598e656626a76355e75bfe28312e7c42df14c006 100644 (file)
@@ -345,7 +345,7 @@ void init_listing(WListing *l)
 
 
 static void do_draw_listing(GrBrush *brush, const WRectangle *geom, 
-                            WListing *l, GrAttr selattr)
+                            WListing *l, GrAttr selattr, int mode)
 {
     int wrapw=grbrush_get_text_width(brush, "\\", 1);
     int ciw=grbrush_get_text_width(brush, CONT_INDENT, CONT_INDENT_LEN);
@@ -368,15 +368,20 @@ static void do_draw_listing(GrBrush *brush, const WRectangle *geom,
             if(i>=l->nstrs)
                 return;
             
-            if(i==l->selected_str)
-                grbrush_set_attr(brush, selattr);
-                
-            draw_multirow(brush, geom->x+x, y, l->itemh, l->strs[i],
-                          (l->iteminfos!=NULL ? &(l->iteminfos[i]) : NULL),
-                          geom->w-x, ciw, wrapw);
+            if(mode>=0 || 
+               l->selected_str==i ||
+               LISTING_DRAW_GET_SELECTED(mode)==i){
             
-            if(i==l->selected_str)
-                grbrush_unset_attr(brush, selattr);
+                if(i==l->selected_str)
+                    grbrush_set_attr(brush, selattr);
+                    
+                draw_multirow(brush, geom->x+x, y, l->itemh, l->strs[i],
+                              (l->iteminfos!=NULL ? &(l->iteminfos[i]) : NULL),
+                              geom->w-x, ciw, wrapw);
+                
+                if(i==l->selected_str)
+                    grbrush_unset_attr(brush, selattr);
+            }
 
             y+=l->itemh*ITEMROWS(l, i);
             r+=ITEMROWS(l, i);
@@ -388,8 +393,16 @@ static void do_draw_listing(GrBrush *brush, const WRectangle *geom,
 }
 
 
+static int prevsel=-1;
+
+static bool filteridx_sel(WListing *l, int i)
+{
+    return (i==prevsel || i==l->selected_str);
+}
+
+
 void draw_listing(GrBrush *brush, const WRectangle *geom,
-                  WListing *l, bool complete, GrAttr selattr)
+                  WListing *l, int mode, GrAttr selattr)
 {
     WRectangle geom2;
     GrBorderWidths bdw;
@@ -397,7 +410,7 @@ void draw_listing(GrBrush *brush, const WRectangle *geom,
     grbrush_begin(brush, geom, GRBRUSH_AMEND|GRBRUSH_KEEP_ATTR
                                |GRBRUSH_NEED_CLIP);
     
-    if(complete)
+    if(mode==LISTING_DRAW_COMPLETE)
         grbrush_clear_area(brush, geom);
     
     grbrush_draw_border(brush, geom);
@@ -409,7 +422,7 @@ void draw_listing(GrBrush *brush, const WRectangle *geom,
     geom2.w=geom->w-bdw.left-bdw.right;
     geom2.h=geom->h-bdw.top-bdw.bottom;
     
-    do_draw_listing(brush, &geom2, l, selattr);
+    do_draw_listing(brush, &geom2, l, selattr, mode);
     
     grbrush_end(brush);
 }
@@ -491,14 +504,16 @@ static int listing_first_visible_row(WListing *l)
 }
 
 
-bool listing_select(WListing *l, int i)
+int listing_select(WListing *l, int i)
 {
     int irow, frow, lrow;
-    bool complredraw=FALSE;
+    int redraw;
+    
+    redraw=LISTING_DRAW_SELECTED(l->selected_str);
     
     if(i<0){
         l->selected_str=-1;
-        return FALSE;
+        return redraw;
     }
     
     assert(i<l->nstrs);
@@ -513,7 +528,7 @@ bool listing_select(WListing *l, int i)
     while(irow<frow){
         one_row_up(l, &(l->firstitem), &(l->firstoff));
         frow--;
-        complredraw=TRUE;
+        redraw=LISTING_DRAW_COMPLETE;
     }
 
     irow+=ITEMROWS(l, i)-1;
@@ -522,9 +537,9 @@ bool listing_select(WListing *l, int i)
     while(irow>lrow){
         one_row_down(l, &(l->firstitem), &(l->firstoff));
         lrow++;
-        complredraw=TRUE;
+        redraw=LISTING_DRAW_COMPLETE;
     }
     
-    return complredraw;
+    return redraw;
 }
 
index c8a669fba5d18ba5d06f9a7b7ddbb53b8e39d315..b8eb288bf30728ea676ae44542578542d2b1d96d 100644 (file)
@@ -12,6 +12,7 @@
 #include <ioncore/common.h>
 #include <ioncore/gr.h>
 #include <ioncore/rectangle.h>
+#include <libtu/minmax.h>
 
 INTRSTRUCT(WListing);
 INTRSTRUCT(WListingItemInfo);
@@ -33,6 +34,13 @@ DECLSTRUCT(WListing){
     bool onecol;
 };
 
+
+#define LISTING_DRAW_COMPLETE 1
+#define LISTING_DRAW_ALL 0
+#define LISTING_DRAW_SELECTED(X) minof(-1, -(X)-2)
+#define LISTING_DRAW_GET_SELECTED(X) (-(X)-2)
+
+    
 extern void init_listing(WListing *l);
 extern void setup_listing(WListing *l, char **strs, int nstrs, bool onecol);
 extern void deinit_listing(WListing *l);
index da29aa9522b46bdb8856cb9079d244664e1e21bc..0567c145a7aef9b6a6e37e2180866367ec58590a 100644 (file)
@@ -374,7 +374,7 @@ void wedln_size_hints(WEdln *wedln, WSizeHints *hints_ret)
 /*{{{ Draw */
 
 
-void wedln_draw_completions(WEdln *wedln, bool complete)
+void wedln_draw_completions(WEdln *wedln, int mode)
 {
     WRectangle geom;
     
@@ -382,7 +382,7 @@ void wedln_draw_completions(WEdln *wedln, bool complete)
         get_completions_geom(wedln, G_CURRENT, &geom);
         
         draw_listing(WEDLN_BRUSH(wedln), &geom, &(wedln->compl_list), 
-                     complete, GR_ATTR(selection));
+                     mode, GR_ATTR(selection));
     }
 }
 
@@ -449,7 +449,7 @@ static void wedln_draw_(WEdln *wedln, bool complete, bool completions)
                                          : GR_ATTR(inactive));
 
     if(completions)
-        wedln_draw_completions(wedln, FALSE);
+        wedln_draw_completions(wedln, LISTING_DRAW_ALL);
     
     wedln_draw_textarea(wedln);
     
@@ -519,7 +519,7 @@ static void wedln_show_completions(WEdln *wedln, char **strs, int nstrs,
 
     input_refit((WInput*)wedln);
     if(w==REGION_GEOM(wedln).w && h==REGION_GEOM(wedln).h)
-        wedln_draw_completions(wedln, TRUE);
+        wedln_draw_completions(wedln, LISTING_DRAW_COMPLETE);
 }
 
 
@@ -537,7 +537,7 @@ void wedln_scrollup_completions(WEdln *wedln)
     if(wedln->compl_list.strs==NULL)
         return;
     if(scrollup_listing(&(wedln->compl_list)))
-        wedln_draw_completions(wedln, TRUE);
+        wedln_draw_completions(wedln, LISTING_DRAW_COMPLETE);
 }
 
 
@@ -546,7 +546,7 @@ void wedln_scrolldown_completions(WEdln *wedln)
     if(wedln->compl_list.strs==NULL)
         return;
     if(scrolldown_listing(&(wedln->compl_list)))
-        wedln_draw_completions(wedln, TRUE);
+        wedln_draw_completions(wedln, LISTING_DRAW_COMPLETE);
 }
 
 
@@ -640,8 +640,8 @@ allocfail:
 
 static void wedln_do_select_completion(WEdln *wedln, int n)
 {
-    bool complredraw=listing_select(&(wedln->compl_list), n);
-    wedln_draw_completions(wedln, complredraw);
+    bool redraw=listing_select(&(wedln->compl_list), n);
+    wedln_draw_completions(wedln, redraw);
 
     update_nocompl++;
     edln_set_completion(&(wedln->edln), wedln->compl_list.strs[n],
index e30d8c89dc53b0cccbd1198617206c3dcdf955fd..b187e99291d13d31c67319079f0cc2a2009016d1 100644 (file)
@@ -64,7 +64,7 @@ static WRegion *create_scratchws(WWindow *parent, const WFitParams *fp,
 {
     WRegion *reg;
     WRegionAttachData data;
-    WGroupAttachParams par;
+    WGroupAttachParams par=GROUPATTACHPARAMS_INIT;
     WGroupWS *ws;
     
     ws=create_groupws(parent, fp);
@@ -108,8 +108,8 @@ static WRegion *create_scratchws(WWindow *parent, const WFitParams *fp,
 static WRegion *create(WMPlex *mplex, int flags)
 {
     WRegion *sp;
-    WMPlexAttachParams par;
-
+    WMPlexAttachParams par=MPLEXATTACHPARAMS_INIT;
+    
     par.flags=(flags
                |MPLEX_ATTACH_UNNUMBERED
                |MPLEX_ATTACH_SIZEPOLICY
index d3c2102f5525ae52fcaf70279bada3e78bfbc571..c44aca39e38e5c52c62f9e759bc6075adecc58a7 100644 (file)
@@ -289,3 +289,23 @@ double statusd_last_modified(const char *fname)
     return (double)(st.st_mtime>st.st_ctime ? st.st_mtime : st.st_ctime);
 }
 
+
+EXTL_EXPORT
+ExtlTab statusd_getloadavg()
+{
+    ExtlTab t=extl_create_table();
+    double l[3];
+    int n;
+    
+    n=getloadavg(l, 3);
+    
+    if(n>=1)
+        extl_table_sets_d(t, "1min", l[0]);
+    if(n>=2)
+        extl_table_sets_d(t, "5min", l[1]);
+    if(n>=3)
+        extl_table_sets_d(t, "15min", l[2]);
+        
+    return t;
+}
+
index cd62178ce9ab87a0221b9f51f7ac99156ebd4264..88162af1cf8ae1e70be3238b79d9b63b9b495f0b 100644 (file)
 
 local defaults={
     update_interval=10*1000,
-    load_hint=1,
+    load_hint="1min",
     important_threshold=1.5,
     critical_threshold=4.0
 }
 
 local settings=table.join(statusd.get_config("load"), defaults)
 
-local loadpat='^(%d+%.%d+).*(%d+%.%d+).*(%d+%.%d+)'
+local load_timer
 
-local function get_load_proc()
-    local f=io.open('/proc/loadavg', 'r')
-    if not f then
-        return ""
-    end
-    local s=f:read('*l')
-    f:close()
-    local st, en, load=string.find(s, '^(%d+%.%d+ %d+%.%d+ %d+%.%d+)')
-    
-    return string.gsub((load or ""), " ", ", ")
-end
-
-local function get_load_uptime()
-    local f=io.popen('uptime', 'r')
-    if not f then
-        return "??"
-    end
-    local s=f:read('*l')
-    f:close()
-    local st, en, load=string.find(s, 'load averages?:%s*(.*)')
-    return (load or "")
-end
-
-local function detect_load_fn()
-    if get_load_proc()~="" then
-        return get_load_proc
-    else
-        return get_load_uptime
-    end
-end
-
-local get_load, load_timer
-
-local function get_hint(l)
-    local v=tonumber(l)
+local function get_hint(v)
     local i="normal"
     if v then
         if v>settings.critical_threshold then
@@ -73,26 +39,31 @@ local function get_hint(l)
     return i
 end
 
-local l1min, l5min, l15min=2+1, 2+2, 2+3
+local function fmt(l)
+    if not l then
+        return "?"
+    else
+        return string.format("%0.2f", l)
+    end
+end
 
 local function update_load()
-    local l = get_load()    
-    local lds={string.find(l, loadpat)}
-    statusd.inform("load", l)
-    statusd.inform("load_hint", get_hint(lds[settings.load_hint+2]))
-    statusd.inform("load_1min", lds[l1min])
-    statusd.inform("load_1min_hint", get_hint(lds[l1min]))
-    statusd.inform("load_5min", lds[l5min])
-    statusd.inform("load_5min_hint", get_hint(lds[l5min]))
-    statusd.inform("load_15min", lds[l15min])
-    statusd.inform("load_15min_hint", get_hint(lds[l15min]))
+    local lds = statusd.getloadavg()
+    f1, f5, f15 = fmt(lds["1min"]), fmt(lds["5min"]), fmt(lds["15min"])
+    statusd.inform("load", f1..", "..f5..", "..f15)
+    statusd.inform("load_hint", get_hint(lds[settings.load_hint]))
+    statusd.inform("load_1min", f1)
+    statusd.inform("load_1min_hint", get_hint(lds["1min"]))
+    statusd.inform("load_5min", f5)
+    statusd.inform("load_5min_hint", get_hint(lds["5min"]))
+    statusd.inform("load_15min", f15)
+    statusd.inform("load_15min_hint", get_hint(lds["15min"]))
     load_timer:set(settings.update_interval, update_load)
 end
 
 -- Init
 --statusd.inform("load_template", "0.00, 0.00, 0.00");
 
-get_load=detect_load_fn()
 load_timer=statusd.create_timer()
 update_load()
 
index b6a0e7310f29b11a2bc9f4163cd2d26f26e53e52..2e84bf3d3616adcb6786eaa94675e31a2124a9b8 100644 (file)
 #include <libextl/readconfig.h>
 #include <libmainloop/exec.h>
 #include <libmainloop/select.h>
+#include <libmainloop/signal.h>
 #include <ioncore/saveload.h>
 #include <ioncore/bindmaps.h>
 #include <ioncore/global.h>
+#include <ioncore/ioncore.h>
 
 #include "statusbar.h"
 #include "exports.h"
 
 
-#define CF_STATUSD_TIMEOUT_SEC 5
+#define CF_STATUSD_TIMEOUT_SEC 3
 
 
 /*{{{ Module information */
@@ -92,7 +94,7 @@ static bool wait_statusd_init(int outfd, int errfd, ExtlFn dh, ExtlFn eh)
     int retval;
     bool dummy, doneseen, eagain=FALSE;
     
-    if(gettimeofday(&endtime, NULL)!=0){
+    if(mainloop_gettime(&endtime)!=0){
         warn_err();
         return FALSE;
     }
@@ -144,7 +146,7 @@ static bool wait_statusd_init(int outfd, int errfd, ExtlFn dh, ExtlFn eh)
             goto timeout;
         }
         
-        if(gettimeofday(&now, NULL)!=0){
+        if(mainloop_gettime(&now)!=0){
             warn_err();
             return FALSE;
         }
@@ -153,8 +155,13 @@ static bool wait_statusd_init(int outfd, int errfd, ExtlFn dh, ExtlFn eh)
     return TRUE;
     
 timeout:
-    warn(TR("ion-statusd timed out."));
-    return FALSE;
+    /* Just complain to stderr, not startup error log, and do not fail.
+     * The system might just be a bit slow. We can continue, but without
+     * initial values for the meters, geometry adjustments may be necessary
+     * when we finally get that information.
+     */
+    ioncore_warn_nolog(TR("ion-statusd timed out."));
+    return TRUE;
 }
 
 
index 81db1a4f435e58ed1eef335b8476ebadc74a062c..1eec051e8bbefb629b4c3bc5f22992d4636088e6 100644 (file)
@@ -233,6 +233,7 @@ function mod_statusbar.rcv_statusd_err(str)
     end
 end
 
+local tried_to_launch=false
 
 --DOC
 -- Load modules and launch \file{ion-statusd} with configuration 
@@ -243,6 +244,8 @@ function mod_statusbar.launch_statusd(cfg)
         return
     end
     
+    tried_to_launch=true
+    
     local mods=get_modules()
     
     -- Load modules
@@ -253,9 +256,10 @@ function mod_statusbar.launch_statusd(cfg)
     end
 
     -- Lookup ion-statusd
-    local statusd=ioncore.lookup_script("ion-statusd")
+    local statusd_script="ion-statusd"
+    local statusd=ioncore.lookup_script(statusd_script)
     if not statusd then
-        ioncore.warn(TR("Could not find %s", script))
+        ioncore.warn(TR("Could not find %s", statusd_script))
         return
     end
 
@@ -267,7 +271,7 @@ function mod_statusbar.launch_statusd(cfg)
     local cfg=mod_statusbar.cfg_statusd(cfg or {})
     local params=""
     table.foreach(mods, function(k) params=params.." -m "..k end)
-    local cmd=statusd.." -q -c "..cfg..params
+    local cmd=statusd.." -c "..cfg..params
     
     local rcv=coroutine.wrap(mod_statusbar.rcv_statusd)
     local rcverr=mod_statusbar.rcv_statusd_err
@@ -298,8 +302,8 @@ end
 --   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"}
+--   \var{pos} & string & Position: \codestr{tl}, \codestr{tr}, 
+--                        \codestr{bl} or \codestr{br}
 --                        (for the obvious combinations of 
 --                        top/left/bottom/right). \\
 --   \var{screen} & integer & Screen number to create the statusbar on. \\
@@ -350,6 +354,6 @@ package.loaded["mod_statusbar"]=true
 dopath('cfg_statusbar', true)
 
 -- Launch statusd if the user didn't launch it.
-if statusd_pid<=0 then
+if not tried_to_launch then
     mod_statusbar.launch_statusd()
 end
index d05cc587153731cb46dd95a212756a4ac003c041..568a2d1a139766801a755d6b132a4c345cbba6d5 100644 (file)
@@ -471,28 +471,28 @@ void splittree_scan_stdisp_rootward(WSplit *node)
 }
 
 
-static WSplitSplit *splittree_scan_stdisp_parent(WSplit *node_, bool set_saw)
+static WSplitST *splittree_scan_stdisp(WSplit *node_, bool set_saw)
 {
-    WSplitSplit *r, *node=OBJ_CAST(node_, WSplitSplit);
+    WSplitST *r=NULL;
+    WSplitSplit *node=OBJ_CAST(node_, WSplitSplit);
     
     if(node==NULL)
         return NULL;
     
-    if(OBJ_IS(node->tl, WSplitST)){
-        if(set_saw)
-            saw_stdisp=(WSplitST*)node->tl;
-        return node;
-    }
-
-    if(OBJ_IS(node->br, WSplitST)){
+    r=OBJ_CAST(node->tl, WSplitST);
+    if(r==NULL)
+        r=OBJ_CAST(node->br, WSplitST);
+    
+    if(r!=NULL){
         if(set_saw)
-            saw_stdisp=(WSplitST*)node->br;
-        return node;
+            saw_stdisp=r;
+        return r;
     }
-
-    r=splittree_scan_stdisp_parent(node->tl, set_saw);
+    
+    r=splittree_scan_stdisp(node->tl, set_saw);
     if(r==NULL)
-        r=splittree_scan_stdisp_parent(node->br, set_saw);
+        r=splittree_scan_stdisp(node->br, set_saw);
+    
     return r;
 }
 
@@ -504,26 +504,41 @@ static bool stdisp_immediate_child(WSplitSplit *node)
 }
 
 
-static WSplit *move_stdisp_out_of_way(WSplit *node)
+static WSplit *dodge_stdisp(WSplit *node, bool keep_within)
 {
+    WSplitST *stdisp;
     WSplitSplit *stdispp;
     
-    if(!OBJ_IS(node, WSplitSplit))
+    stdisp=splittree_scan_stdisp(node, TRUE);
+    
+    if(stdisp==NULL)
         return node;
     
-    stdispp=splittree_scan_stdisp_parent(node, TRUE);
-        
+    stdispp=OBJ_CAST(((WSplit*)stdisp)->parent, WSplitSplit);
+    
     if(stdispp==NULL)
         return node;
-        
-    while(stdispp->tl!=node && stdispp->br!=node){
+    
+    if((WSplit*)stdispp==node){
+        /* Node itself immediately contains stdisp. Due to the way
+         * try_unsink works, stdisp this will not change, so another
+         * node must be used, if we want to fully dodge stdisp.
+         */
+        return (keep_within
+                ? node
+                : (stdispp->tl==(WSplit*)stdisp 
+                   ? stdispp->br 
+                   : stdispp->tl));
+    }
+    
+    do{
         if(!split_try_unsink_stdisp(stdispp, FALSE, TRUE)){
             warn(TR("Unable to move the status display out of way."));
             return NULL;
         }
-    }
+    }while(stdispp->tl!=node && stdispp->br!=node);
     
-    return (WSplit*)stdispp;
+    return node;
 }
 
 
@@ -1076,16 +1091,18 @@ WSplitRegion *splittree_split(WSplit *node, int dir, WPrimn primn,
     
     assert(node!=NULL && parent!=NULL);
     
+    splittree_begin_resize();
+    
+    node=dodge_stdisp(node, FALSE);
+    
+    if(node==NULL)
+        return NULL;
+    
     if(OBJ_IS(node, WSplitST)){
         warn(TR("Splitting the status display is not allowed."));
         return NULL;
     }
 
-    splittree_begin_resize();
-    
-    if(!move_stdisp_out_of_way(node))
-        return NULL;
-
     if(primn!=PRIMN_TL && primn!=PRIMN_BR)
         primn=PRIMN_BR;
     if(dir!=SPLIT_HORIZONTAL && dir!=SPLIT_VERTICAL)
@@ -1637,14 +1654,16 @@ static void splitsplit_flip_(WSplitSplit *split)
 
 
 /*EXTL_DOC
- * Flip contents of \var{node}.
+ * Flip contents of \var{split}.
  */
 EXTL_EXPORT_MEMBER
 void splitsplit_flip(WSplitSplit *split)
 {
     splittree_begin_resize();
 
-    if(!move_stdisp_out_of_way((WSplit*)split))
+    split=OBJ_CAST(dodge_stdisp((WSplit*)split, FALSE), WSplitSplit);
+    
+    if(split==NULL)
         return;
     
     splitsplit_flip_(split);
@@ -1707,19 +1726,19 @@ static bool split_fliptrans_to(WSplit *node, const WRectangle *geom,
      * geometry calculation we move it immediately below node, and
      * resize stdisp's fixed parent node instead.
      */
-    node2=move_stdisp_out_of_way(node);
+    node2=dodge_stdisp(node, TRUE);
     
-    if(node2==NULL)
+    if(node==NULL || node2!=node)
         return FALSE;
     
-    split_update_bounds(node2, TRUE);
+    split_update_bounds(node, TRUE);
     
-    split_do_rqgeom_(node2, geom, PRIMN_ANY, PRIMN_ANY, &rg, FALSE);
+    split_do_rqgeom_(node, geom, PRIMN_ANY, PRIMN_ANY, &rg, FALSE);
     
-    split_do_resize(node2, &rg, PRIMN_ANY, PRIMN_ANY, trans);
+    split_do_resize(node, &rg, PRIMN_ANY, PRIMN_ANY, trans);
     
     if(flip!=FLIP_NONE)
-        splittree_flip_dir(node2, flip);
+        splittree_flip_dir(node, flip);
 
     splittree_end_resize();
     
index 6fec3723b095675a06c429a934a2ce056375f7a6..877a8a861a9d11c1c03f328a0d1c82c2dcd0e8c5 100644 (file)
@@ -660,6 +660,7 @@ void tiling_do_managed_remove(WTiling *ws, WRegion *reg)
     }
 
     region_unset_manager(reg, (WRegion*)ws);
+    splittree_set_node_of(reg, NULL);
 }
 
 
@@ -701,6 +702,7 @@ void tiling_managed_remove(WTiling *ws, WRegion *reg)
             
             if(other!=NULL){
                 node->reg=other;
+                splittree_set_node_of(other, node);
                 tiling_managed_add(ws, other);
                 reused=TRUE;
             }else{
@@ -1067,45 +1069,26 @@ WFrame *tiling_split_at(WTiling *ws, WFrame *frame, const char *dirstr,
 }
 
 
-void do_unsplit(WRegion *reg)
+/*EXTL_DOC
+ * Try to relocate regions managed by \var{reg} to another frame
+ * and, if possible, destroy it.
+ */
+EXTL_EXPORT_MEMBER
+void tiling_unsplit_at(WTiling *ws, WRegion *reg)
 {
-    WTiling *ws=REGION_MANAGER_CHK(reg, WTiling);
     WPHolder *ph;
-    bool res;
     
-    if(ws==NULL)
+    if(reg==NULL || REGION_MANAGER(reg)!=(WRegion*)ws)
         return;
     
     ph=region_get_rescue_pholder_for((WRegion*)ws, reg);
     
-    if(ph==NULL){
-        res=!region_rescue_needed(reg);
-    }else{
-        res=region_rescue(reg, ph);
+    if(ph!=NULL){
+        region_rescue(reg, ph);
         destroy_obj((Obj*)ph);
     }
     
-    if(!res){
-        warn(TR("Unable to unsplit: Could not move client windows "
-                "elsewhere within the tiling."));
-        return;
-    }
-    
-    destroy_obj((Obj*)reg);
-}
-
-
-/*EXTL_DOC
- * Try to relocate regions managed by \var{reg} to another frame
- * and, if possible, destroy it.
- */
-EXTL_EXPORT_MEMBER
-void tiling_unsplit_at(WTiling *ws, WRegion *reg)
-{
-    if(reg==NULL || REGION_MANAGER(reg)!=(WRegion*)ws)
-        return;
-        
-    mainloop_defer_action((Obj*)reg, (WDeferredAction*)do_unsplit);
+    region_defer_rqdispose(reg);
 }
 
 
index 2db7db1d0d2e37877ca6becd7ed8afbeb439bbaa..30327baea08f07d982ab2a38dfbf2ebf9d889339 100644 (file)
@@ -13,7 +13,7 @@ MSGMERGE = msgmerge
 MSGCAT = msgcat
 LXGETTEXT = lua-xgettext
 
-TRANSLATIONS := fi cs
+TRANSLATIONS := fi cs fr
 MO_FILES := $(patsubst %,%.mo, $(TRANSLATIONS))
 PO_FILES := $(patsubst %,%.po, $(TRANSLATIONS))
 
@@ -89,3 +89,6 @@ update_fi: pot
 update_cs: pot
        $(MSGMERGE) -U cs.po $(POTFILE)
 
+update_fr: pot
+       $(MSGMERGE) -U fr.po $(POTFILE)
+
diff --git a/po/fr.po b/po/fr.po
new file mode 100644 (file)
index 0000000..0eb2d74
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,1550 @@
+# translation of ion3.po to
+#
+# french language translations for Ion3.
+#
+# Copyright (c) Pierre-Henri RAMBOZ 2007.
+#
+# This file is distributed under the same license as the Ion3 package.
+#
+#cf ligne 770 pour welcome.fr.txt
+msgid ""
+msgstr ""
+"Project-Id-Version: ion3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-22 15:41+0200\n"
+"PO-Revision-Date: 2007-05-21 14:12+0200\n"
+"Last-Translator: Pierre-Henri RAMBOZ DidouPh@gmail.com\n"
+"Language-Team:  <pclos-il8n-dev@lists.berlios.de>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../ioncore/conf-bindings.c:96
+msgid "Insane key combination."
+msgstr "Combinaison de touche démente"
+
+#: ../ioncore/conf-bindings.c:100
+msgid "Could not convert keysym to keycode."
+msgstr "Ne peut convertir keysym en keycode."
+
+#: ../ioncore/conf-bindings.c:111
+#, c-format
+msgid "Unknown button \"%s\"."
+msgstr "Bouton inconnu \"%s\"."
+
+#: ../ioncore/conf-bindings.c:116
+msgid "Insane button combination."
+msgstr "Combinaison de boutons démente."
+
+#: ../ioncore/conf-bindings.c:123 ../ioncore/conf-bindings.c:130
+msgid "Insane modifier combination."
+msgstr "Combinaison de modificateur démente."
+
+#: ../ioncore/conf-bindings.c:168
+#, c-format
+msgid "Can not wait on modifiers when no modifiers set in \"%s\"."
+msgstr "Ne peut attendre les modificateurs quand aucun modificateur définis dans \"%s\"."
+
+#: ../ioncore/conf-bindings.c:186
+#, c-format
+msgid "Unable to add binding %s."
+msgstr "Ne peut ajouter de liaison %s."
+
+#: ../ioncore/conf-bindings.c:191
+#, c-format
+msgid "Unable to remove binding %s."
+msgstr "Ne peut enlever une liaison %s."
+
+#: ../ioncore/conf-bindings.c:230
+#, c-format
+msgid "Unable to add submap for binding %s."
+msgstr "Ne peut ajouter de sousmappage pour la liaison %s."
+
+#
+#: ../ioncore/conf-bindings.c:260
+msgid "Binding type not set."
+msgstr "Type de liaison indéfinis."
+
+#: ../ioncore/conf-bindings.c:270
+#, c-format
+msgid "Unknown binding type \"%s\"."
+msgstr "Type de liaison inconnu \"%s\"."
+
+#: ../ioncore/conf-bindings.c:292
+#, c-format
+msgid "Unknown area \"%s\" for binding %s."
+msgstr "Zone inconnue \"%s\" pour la liaison %s."
+
+#: ../ioncore/conf-bindings.c:333
+#, c-format
+msgid "Unable to get bindmap entry %d."
+msgstr "Incapable d'obtenir la liaison de mappage pour %d."
+
+#: ../ioncore/conf-bindings.c:375
+msgid "Unable to convert keysym to string."
+msgstr "Incapable de convertir keysym en string."
+
+#: ../ioncore/conf-bindings.c:389
+msgid "Unable to convert button to string."
+msgstr "Incapable de convertir le bouton en string."
+
+#
+#: ../ioncore/event.c:113
+msgid "Time request from X server failed."
+msgstr "Requète temporelle pour le serveur X échouée."
+
+#
+#: ../ioncore/exec.c:186
+msgid "Not saving state: running under session manager."
+msgstr "Ne sauvegarde pas l'état : s'exécute dans le gestionnaire de session"
+
+#: ../ioncore/strings.c:107 ../ioncore/strings.c:143 ../ioncore/strings.c:176
+msgid "Invalid multibyte string."
+msgstr "String multibyte invalide."
+
+#: ../ioncore/strings.c:267
+#, c-format
+msgid "Error compiling regular expression: %s"
+msgstr "Erreur enc compilant l'expression régulière: %s"
+
+#: ../ioncore/modules.c:158
+msgid "Invalid module name."
+msgstr "Nom de module invalide."
+
+#
+#: ../ioncore/modules.c:170
+msgid "The module is already loaded."
+msgstr "Le module est déjà chargé."
+
+#: ../ioncore/modules.c:185
+msgid "Module version information not found or version mismatch. Refusing to use."
+msgstr "Information de version de module non trouvée ou erreur de version. Refus d'utilisation."
+
+#: ../ioncore/modules.c:196
+#, c-format
+msgid "Unable to initialise module %s."
+msgstr "Incapable d'initialiser le module %s."
+
+#: ../ioncore/modules.c:220 ../libextl/readconfig.c:388
+#, c-format
+msgid "Unable to find '%s' on search path."
+msgstr "Incapable de trouver '%s' dans le chemin de recherche."
+
+#: ../ioncore/modules.c:291
+msgid "Unknown module."
+msgstr "Module inconnu."
+
+#: ../ioncore/modules.c:299
+msgid "Unable to initialise module."
+msgstr "Incapable d'initialiser le module."
+
+#: ../ioncore/modules.c:344
+msgid "No module to load given."
+msgstr "Pas de module à charger spécifié"
+
+#: ../ioncore/property.c:355 ../ioncore/property.c:364
+msgid "Invalid arguments."
+msgstr "Argument invalide."
+
+#: ../ioncore/screen.c:385
+msgid "Only workspace may not be destroyed/detached."
+msgstr "Seuls les espace de travail ne peuvent être détruits/détachés"
+
+#: ../ioncore/screen.c:396
+msgid "Screens may not be destroyed."
+msgstr "Les écrans ne seront pas détruits."
+
+#: ../ioncore/screen.c:432
+msgid "Invalid offset."
+msgstr "Offset invalide"
+
+#: ../ioncore/screen.c:471
+#, c-format
+msgid "Unable to create a workspace on screen %d."
+msgstr "Incapable de créer un espace de travail sur l'écran %d."
+
+#: ../ioncore/sizehint.c:157
+msgid "Invalid client-supplied width/height increment."
+msgstr "Incrémentation de hauteur/largeur envoyée par le client invalide."
+
+#: ../ioncore/sizehint.c:165
+msgid "Invalid client-supplied aspect-ratio."
+msgstr "Rapport d'aspect envoyé par le client invalide."
+
+#: ../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"
+"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 ""
+"Ce programme est un logiciel libre; vous pouvez le redistribuer et/ou\n"
+"le modifier sous les termes de la GNU Lesser General Public\n"
+"Licence comme publiée par la Free Software Foundation; soit\n"
+"en version 2.1 de la licence, ou (a votre convenance) une version ulterrieure.\n"
+"\n"
+"Ce programme est distribué dans l'espoir qu'il sera utile\n"
+"Mais sans aucune garantie; sans même la garantie implicite que\n"
+"celui-ci soit commercialisable ou adapté a un usage quelconque. référez vous\n"
+"à la GNU Lesser General Public Licence pour plus de détails.\n"
+
+#: ../ioncore/ioncore.c:159
+msgid "No encoding given in LC_CTYPE."
+msgstr "Pas d'encodage donné dans LC_CTYPE"
+
+#: ../ioncore/ioncore.c:470
+#, c-format
+msgid "Could not connect to X display '%s'"
+msgstr "Incapable de se connecter a l'affichage X \"%s\""
+
+#: ../ioncore/ioncore.c:522
+msgid "Could not find a screen to manage."
+msgstr "N'a pas trouvé d'écran à gérer."
+
+#: ../ioncore/xic.c:38
+msgid "Failed to open input method."
+msgstr "Echec d'ouverture d'une méthode d'entrée."
+
+#: ../ioncore/xic.c:43
+msgid "Input method doesn't support any style."
+msgstr "La méthode d'entrée ne suporte aucun style."
+
+#: ../ioncore/xic.c:58
+msgid "input method doesn't support my preedit type."
+msgstr "La méthode d'entrée ne suporte pas mes types preedit."
+
+#: ../ioncore/xic.c:86
+msgid "Failed to create input context."
+msgstr "Echec de création du contexte d'entrée."
+
+#: ../ioncore/clientwin.c:379
+#, c-format
+msgid "The transient_for hint for \"%s\" points to itself."
+msgstr "Le transcient_for hint vers \"%s\" pointe vers lui-même."
+
+#: ../ioncore/clientwin.c:383
+#, c-format
+msgid ""
+"Client window \"%s\" has broken transient_for hint. (\"Extended WM hints\" "
+"multi-parent brain damage?)"
+msgstr ""
+"La fenêtre de client \"%s\" a rompu le transient_for hint. (\"WM hints étendus\" "
+"domages cérébraux multi parents?)"
+
+#: ../ioncore/clientwin.c:388
+#, c-format
+msgid "The transient_for window for \"%s\" is not on the same screen."
+msgstr "La fenêtre transcient_for pour \"%s\" n'est pas sur le même écran."
+
+#: ../ioncore/clientwin.c:408 ../ioncore/clientwin.c:496
+#: ../ioncore/clientwin.c:1292
+#, c-format
+msgid "Window %#x disappeared."
+msgstr "la fenêtre %#x a disparue."
+
+#: ../ioncore/clientwin.c:516
+msgid "Unable to find a matching root window!"
+msgstr "Incapable de trouver une fenêtre racine correspondante!"
+
+#: ../ioncore/clientwin.c:555
+#, c-format
+msgid "Unable to manage client window %#x."
+msgstr "incapable de gérer la fenêtre du client %#x."
+
+#: ../ioncore/clientwin.c:604
+msgid "Changes is WM_TRANSIENT_FOR property are unsupported."
+msgstr "Le changement est WM_TRANSCIENT_FOR propriété non supportée."
+
+#
+#: ../ioncore/clientwin.c:776
+msgid "Client does not support the WM_DELETE protocol."
+msgstr "Le client ne supporte pas le protocole WM_DELETE."
+
+#: ../ioncore/clientwin.c:1298
+msgid "Saved client window does not want to be managed."
+msgstr "La fenêtre de client sauvegardée ne veut pas être gérée."
+
+#
+#: ../ioncore/colormap.c:96
+msgid "Unable to store colourmap watch info."
+msgstr "Incapable de stocker les infos de la palette de couleur"
+
+#: ../ioncore/region.c:47
+msgid "Creating region with negative width or height!"
+msgstr "Création de région avec une largeur ou hauteur négative!"
+
+#: ../ioncore/region.c:95
+#, c-format
+msgid "Destroying object \"%s\" with client windows as children."
+msgstr "Destruction de l'objet \"%s\" avec une fenêtre de client comme fille."
+
+#: ../ioncore/region.c:434
+#, c-format
+msgid "Can not destroy %s: contains client windows."
+msgstr "Ne peut détruire %s: contiend des fenêtres client."
+
+#: ../ioncore/region.c:435
+msgid "(unknown)"
+msgstr "(inconnu)"
+
+#: ../ioncore/region.c:498
+msgid "Failed to rescue some client windows - not closing."
+msgstr "Echec de sauvetage de quelques fenêtres de client - ne ferme pas."
+
+#: ../ioncore/attach.c:58 ../ioncore/frame-pointer.c:280
+#, c-format
+msgid "Attempt to make region %s manage its ancestor %s."
+msgstr "Temptative de faire que la région %s gère ses ancètres %s."
+
+#: ../ioncore/attach.c:83
+msgid "Unable to reparent."
+msgstr "Incapable de réaparenter."
+
+#: ../ioncore/attach.c:92
+msgid "Unexpected attach error: trying to recover by attaching to screen."
+msgstr "Erreur d'atachement inattendue: essai de récupération par attachement à l'écran."
+
+#: ../ioncore/attach.c:111
+msgid "Failed recovery."
+msgstr "Récupération échouée."
+
+#: ../ioncore/manage.c:193
+msgid "Unable to find a screen for a new client window."
+msgstr "Incapable de trouver un écran pour une nouvelle fenêtre de client."
+
+#: ../ioncore/rootwin.c:218
+#, c-format
+msgid "Unable to redirect root window events for screen %d."
+msgstr "Incapable de rediriger les évènement de la fenêtre racine pour l'écran %d."
+
+#: ../ioncore/names.c:91
+#, c-format
+msgid "Corrupt instance number %s."
+msgstr "Numéro d'instance corrompu %s."
+
+#: ../ioncore/saveload.c:98
+#, c-format
+msgid "Unknown class \"%s\", cannot create region."
+msgstr "classe inconnue \"%s\", ne peut créer de région."
+
+#: ../ioncore/saveload.c:202
+#, 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?)"
+msgstr ""
+"Il y a eu des erreurs en changeant la mise en place. Sauvegarde de la \n"
+"mise en place courrante en tant que savefile %s.\n"
+"Si vous _n'utilisez_ pas de gestionnaire de session et voulez restaurer\n"
+"votre ancienne mise en place, copiez ce fichier de sauvegarde sur le\n"
+"savefile situé dans le même répertoire pendant que Ion ne fonctionne pas\n"
+"et après avoir fixé vos autresfichiers de configuration causant des\n"
+"problèmes. (peut-être un module manquant"
+
+#: ../ioncore/saveload.c:253
+msgid "Unable to get file for layout backup."
+msgstr "Incapable d'obtenir le fichier de sauvegarde de la mise en place."
+
+#: ../ioncore/saveload.c:257
+#, c-format
+msgid "Backup file %s already exists."
+msgstr "Le fichier de sauvegarde %s existe déjà."
+
+#: ../ioncore/saveload.c:263
+msgid "Failed backup."
+msgstr "Sauvegarde échouée."
+
+#
+#: ../ioncore/saveload.c:268
+msgid "Unable to initialise layout on any screen."
+msgstr "Incapable d'initialiser la mise en place sur aucun écran."
+
+#: ../ioncore/saveload.c:295
+#, c-format
+msgid "Unable to get configuration for screen %d."
+msgstr "Incapable d'obtenir la configuration pour l'écran %d."
+
+#: ../ioncore/saveload.c:308
+msgid "Unable to save layout."
+msgstr "Incapable de sauvegarder la mise en place"
+
+#: ../ioncore/conf.c:235
+msgid "User directory can not be set."
+msgstr "Le répertoire d'utilisateur ne peut être définis."
+
+#: ../ioncore/conf.c:309
+msgid "Some bindmaps were empty, loading ioncore_efbb."
+msgstr "Certaines bindmaps étaient vides, chargement de ioncore_efbb."
+
+#: ../ioncore/fullscreen.c:49
+msgid "Failed to enter full screen mode."
+msgstr "Echec d'entrée dans le mode plein écran."
+
+#: ../ioncore/fullscreen.c:83
+msgid ""
+"Failed to return from full screen mode; remaining manager or parent from "
+"previous location refused to manage us."
+msgstr ""
+"Echec de retour du mode plein écran; reliquat de gestionaire ou parent de "
+"la position précédente ayant refusé de nous gérer."
+
+#
+#: ../ioncore/mplex.c:1685
+msgid "Invalid position setting."
+msgstr "Réglages de position invalides."
+
+#
+#: ../ioncore/mplex.c:1725
+msgid "Invalid action setting."
+msgstr "Réglage d'action invalide."
+
+#: ../ioncore/gr.c:120
+#, c-format
+msgid "Drawing engine %s is not registered!"
+msgstr "Gestionnaire de rendu %s non enregistré!"
+
+#: ../ioncore/gr.c:139
+#, c-format
+msgid "Unable to find brush for style '%s'."
+msgstr "Incapable de trouver les pinceaux pour le style \"%s\"."
+
+#: ../ioncore/gr.c:646
+msgid "No drawing engines loaded, trying \"de\"."
+msgstr "Pas de moteur de rendu chagé, éssai avec \"de\"."
+
+#: ../ioncore/frame-draw.c:314
+msgid "<empty frame>"
+msgstr "<cadre vide>"
+
+#: ../ioncore/group.c:186 ../mod_tiling/tiling.c:92
+#, c-format
+msgid "Error reparenting %s."
+msgstr "Erreur de réapparissage %s."
+
+#: ../ioncore/group.c:711
+msgid "'bottom' already set."
+msgstr "'bottom' déjà définis."
+
+#: ../ioncore/navi.c:45
+msgid "Invalid parameter."
+msgstr "paramètre invalide"
+
+#: ../ioncore/navi.c:72
+msgid "Invalid direction parameter."
+msgstr "Paramètre de direction invalide."
+
+#: ../ioncore/group-ws.c:51
+#, c-format
+msgid "Unknown placement method \"%s\"."
+msgstr "Méthode de placement inconnue \"%s\"."
+
+#: ../ioncore/detach.c:176
+msgid "Failed to reattach."
+msgstr "Incapable de réattacher."
+
+#: ../ioncore/screen-notify.c:190
+msgid "act: "
+msgstr "acte: "
+
+#
+#: ../mod_tiling/tiling.c:73
+msgid "Split not on workspace."
+msgstr "Division hors de l'espace de travail."
+
+#: ../mod_tiling/tiling.c:348
+msgid "Unable to create a node for status display."
+msgstr "Incapable de créer un noeud pour l'affichage du status."
+
+#: ../mod_tiling/tiling.c:361
+msgid "Unable to create new split for status display."
+msgstr "Incapable de créer de nouvelles divisions pour l'affichage de status"
+
+#: ../mod_tiling/tiling.c:710
+msgid "Tiling in useless state."
+msgstr "Empilement en mode inutile."
+
+#: ../mod_tiling/tiling.c:924
+msgid "Invalid direction"
+msgstr "Direction invalide"
+
+#
+#: ../mod_tiling/tiling.c:957 ../mod_tiling/split.c:1018
+msgid "Invalid node."
+msgstr "Noeud invalide."
+
+#
+#: ../mod_tiling/tiling.c:976
+msgid "Unable to split."
+msgstr "Incapable de diviser."
+
+#: ../mod_tiling/tiling.c:1090
+msgid "Unable to unsplit: Could not move client windows elsewhere within the tiling."
+msgstr "Incapable de diviser : N'a pas pu déplacer la fenêtre cliente ailleur dans l'empilement."
+
+#: ../mod_tiling/tiling.c:1207
+msgid "Nil parameter."
+msgstr "Paramètre Nul."
+
+#: ../mod_tiling/tiling.c:1212
+msgid "Manager doesn't match."
+msgstr "Les gestionnaires ne correspondent pas"
+
+#: ../mod_tiling/tiling.c:1249
+msgid "The status display is not a valid parameter for this routine."
+msgstr "L'affichage du status n'est pas un paramètre valide pour cette routine."
+
+#: ../mod_tiling/tiling.c:1340
+msgid "Refusing to float split directly containing the status display."
+msgstr "Refus de rendre directement flotant la division contenant l'affichage du status."
+
+#: ../mod_tiling/tiling.c:1403
+msgid "No suitable split here."
+msgstr "Pas d'arbre de division acceptable ici."
+
+#
+#: ../mod_tiling/tiling.c:1439
+msgid "Could not get split tree."
+msgstr "N'a pus obtenir l'arbre de divisions"
+
+#: ../mod_tiling/tiling.c:1460
+msgid "Workspace already has a status display node."
+msgstr "L'Espace de travail a déja un noeud d'affichage de status."
+
+#
+#: ../mod_tiling/tiling.c:1498
+msgid "Missing region parameters."
+msgstr "Paramètre de région invalide."
+
+#: ../mod_tiling/tiling.c:1542 ../mod_tiling/splitfloat.c:780
+msgid "Invalid direction."
+msgstr "Direction invalide."
+
+#
+#: ../mod_tiling/tiling.c:1617
+msgid "No split type given."
+msgstr "Pas de typde de division donné."
+
+#: ../mod_tiling/tiling.c:1630
+msgid "Unknown split type."
+msgstr "Type de division inconnue."
+
+#
+#
+#: ../mod_tiling/tiling.c:1670
+msgid "The workspace is empty."
+msgstr "L'espace de travail est vide"
+
+#: ../mod_tiling/placement.c:104
+#, c-format
+msgid "Ooops... could not find a region to attach client window to on workspace %s."
+msgstr ""
+"Ooops... n'a pas trouvé de région pour atacher la fenêtre cliente sur l'espace"
+"de travail %s."
+
+#
+#: ../mod_tiling/split.c:524
+msgid "Unable to move the status display out of way."
+msgstr "Incapable d'enlever l'affichage du status du passage."
+
+#: ../mod_tiling/split.c:937
+msgid "REGION_RQGEOM_TRYONLY unsupported for status display."
+msgstr "REGION_RQGEOM_TRYONLY non suporté pour l'affichage de status."
+
+#
+#: ../mod_tiling/split.c:1083
+msgid "Splitting the status display is not allowed."
+msgstr "Diviser l'affichage de status n'est pas autorisé."
+
+#: ../mod_tiling/split.c:1114 ../mod_tiling/splitfloat.c:903
+msgid "Unable to split: not enough free space."
+msgstr "Incapable de diviser: pas assez d'espace libre."
+
+#: ../mod_tiling/split.c:1865
+#, c-format
+msgid "Unable to get configuration for %s."
+msgstr "Incapable d'obtenir la configuration pour %s."
+
+#: ../mod_tiling/split-stdisp.c:602 ../mod_tiling/split-stdisp.c:627
+msgid "Status display in bad split configuration."
+msgstr "Affichage de status dans une configuration divisée défectueuse"
+
+#: ../mod_tiling/split-stdisp.c:667
+msgid "Status display badly located in split tree."
+msgstr "Affichage de status mal situé dans l'arbre divisé"
+
+#: ../mod_tiling/ops.c:72 ../mod_tiling/ops.c:120
+msgid "Not member of a group"
+msgstr "N'est pas membre d'un groupe"
+
+#: ../mod_tiling/ops.c:77
+msgid "Manager group already has bottom"
+msgstr "Le groupe de gestion est déjà déscendu"
+
+#: ../mod_tiling/ops.c:154
+msgid "Unable to move a region from tiling to group."
+msgstr "Incapable de déplacer une région de l'empilement vers un groupe."
+
+#: ../mod_query/wedln.c:813
+msgid "history"
+msgstr "historique"
+
+#: ../mod_query/fwarn.c:35
+msgid "Error:\n"
+msgstr "Erreur:\n"
+
+#
+#: ../mod_menu/menu.c:601
+msgid "Empty menu."
+msgstr "Menu vide."
+
+#
+#: ../mod_sm/sm.c:111
+msgid "Failed to set session directory."
+msgstr "Echec de définition du répertoire de sessions"
+
+#: ../mod_sm/sm_session.c:86
+msgid "Too many ICE connections."
+msgstr "Trop de connexions ICE."
+
+#: ../mod_sm/sm_session.c:228
+msgid "Failed to save session state"
+msgstr "Echec de sauvegarde l'état de la session"
+
+#: ../mod_sm/sm_session.c:247
+msgid "Failed to request save-yourself-phase2 from session manager."
+msgstr "Echec de requète save-yourself-phase2 depuis le gestionnaire de sessions"
+
+#
+#: ../mod_sm/sm_session.c:296
+msgid "SESSION_MANAGER environment variable not set."
+msgstr "Variable d'environnement SESSION_MANAGER non définie."
+
+#: ../mod_sm/sm_session.c:301
+msgid "Session Manager: IceAddConnectionWatch failed."
+msgstr "Gestionnaire de session: IceAddConnectionWatch échoué."
+
+#
+#: ../mod_sm/sm_session.c:326
+msgid "Unable to connect to the session manager."
+msgstr "Incapable de se connecter au gestionnaire de sessions"
+
+#: ../mod_sp/main.c:126
+msgid "Unable to create scratchpad."
+msgstr "Incapable de créer le bloc note."
+
+#: ../mod_statusbar/main.c:75
+msgid "reading a pipe"
+msgstr "lecture du tunnel (pipe)"
+
+#: ../mod_statusbar/main.c:159
+msgid "ion-statusd timed out."
+msgstr "ion-statusd n'a pas répondu à temps."
+
+#: ../mod_statusbar/statusbar.c:1081
+#, c-format
+msgid "[ %date || load: %load ] %filler%systray"
+msgstr "[ %date || charge: %load ] %filler%systray"
+
+#: ../de/init.c:68
+#, c-format
+msgid "Border attribute %s sanity check failed."
+msgstr "Le test de salubrité de l'attribut de bordure %s a échoué."
+
+#: ../de/init.c:91
+#, c-format
+msgid "Unknown border style \"%s\"."
+msgstr "Style de bordure inconnu \"%s\"."
+
+#: ../de/init.c:111
+#, c-format
+msgid "Unknown border side configuration \"%s\"."
+msgstr "Configuration des côtés de bordure inconnue \"%s\"."
+
+#: ../de/init.c:144
+#, c-format
+msgid "Unable to allocate colour \"%s\"."
+msgstr "Incapable d'allouer la couleur \"%s\"."
+
+#: ../de/init.c:210
+#, c-format
+msgid "Corrupt substyle table %d."
+msgstr "Table de soustyle inconnue %d."
+
+#: ../de/init.c:243
+#, c-format
+msgid "Unknown text alignment \"%s\"."
+msgstr "Alignement de texte inconnu \"%s\"."
+
+#: ../de/init.c:319
+#, c-format
+msgid "'based_on' for %s points back to the style itself."
+msgstr "'based_on' pour %s pointe vers le style lui-même."
+
+#: ../de/init.c:322
+#, c-format
+msgid "Unknown base style. \"%s\""
+msgstr "Style de base inconnu. \"%s\""
+
+#: ../de/font.c:47
+#, c-format
+msgid ""
+"Fontset for font pattern '%s' implements context dependent drawing, which is "
+"unsupported. Expect clutter."
+msgstr ""
+"Fontset pour le modèle de police '%s' implémentant les dessins dépendant du contexte"
+"ce qui n'est pas supporté. Cafouillages attendus."
+
+#: ../de/font.c:59
+#, c-format
+msgid "Could not load font \"%s\", trying \"%s\""
+msgstr "N'a pu charger la police \"%s\", essai avec \"%s\"."
+
+#: ../de/font.c:63
+msgid "Failed to load fallback font."
+msgstr "Echec de chargement de la police de secours."
+
+#: ../de/style.c:315
+#, c-format
+msgid "Style is still in use [%d] but the module is being unloaded!"
+msgstr "Le style est toujours utilisé [%d], mais le module est déchargé!"
+
+#: ../ion/ion.c:42 ../pwm/pwm.c:42
+msgid "X display to use"
+msgstr "Affichage X a utiliser"
+
+#: ../ion/ion.c:45 ../pwm/pwm.c:45
+msgid "Configuration file"
+msgstr "Fichier de configuration"
+
+#: ../ion/ion.c:48 ../pwm/pwm.c:48
+msgid "Add directory to search path"
+msgstr "Ajouter le répertoire au chemin de la recherche"
+
+#: ../ion/ion.c:51 ../pwm/pwm.c:51
+msgid "Manage default screen only"
+msgstr "Gérer l'écra par défault seulement"
+
+#: ../ion/ion.c:54 ../pwm/pwm.c:54
+msgid "Name of session (affects savefiles)"
+msgstr "Nom de session (affecte les savefiles)"
+
+#: ../ion/ion.c:57 ../pwm/pwm.c:57
+msgid "Session manager client ID"
+msgstr "ID client du gestionnaire de sessions"
+
+#: ../ion/ion.c:60 ../pwm/pwm.c:60
+msgid "Do not create startup error log and display it with xmessage."
+msgstr "Ne pas crée de journal d'erreurs de démarrage et les afficher avec xmessage."
+
+#: ../ion/ion.c:64 ../pwm/pwm.c:64
+msgid "Show this help"
+msgstr "Affiche cette aide"
+
+#: ../ion/ion.c:67 ../pwm/pwm.c:67
+msgid "Show program version"
+msgstr "Afficher la version du programme"
+
+#: ../ion/ion.c:70 ../pwm/pwm.c:70
+msgid "Show about text"
+msgstr "Afficher le text à propos"
+
+#: ../ion/ion.c:85
+msgid "Could not get user configuration file directory."
+msgstr "N'a pas trouvé le répertoire de fichier de configuration utilisateur"
+
+#: ../ion/ion.c:99
+#, c-format
+msgid "%s/welcome.txt"
+msgstr "%s/welcome.txt"
+
+#: ../ion/ion.c:132 ../pwm/pwm.c:79
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+msgstr ""
+"Usage: %s [options]\n"
+"\n"
+
+#
+#: ../ion/ion.c:200 ../pwm/pwm.c:150
+msgid "Invalid command line."
+msgstr "Ligne de commande invalide."
+
+#: ../ion/ion.c:222
+msgid "Ion startup error log:\n"
+msgstr "Registre d'erreurs Ion:\n"
+
+#: ../ion/ion.c:233 ../pwm/pwm.c:183
+msgid "Refusing to start due to encountered errors."
+msgstr "Refus de démarrage en raison des erreurs rencontrées."
+
+#: ../pwm/pwm.c:172
+msgid "PWM startup error log:\n"
+msgstr "Registre d'erreurs PWM:\n"
+
+#: ../libextl/readconfig.c:86
+msgid "$HOME not set"
+msgstr "$HOME non définis"
+
+#: ../libextl/readconfig.c:113
+msgid "User directory not set. Unable to set session directory."
+msgstr "Répertoire d'utilisateur non définis. Incapable de définir le répertoire de sessions"
+
+#: ../libextl/readconfig.c:254
+#, c-format
+msgid "Falling back to %s."
+msgstr "Retour forcé à %s"
+
+#: ../libextl/readconfig.c:474
+#, c-format
+msgid "Unable to create session directory \"%s\"."
+msgstr "Incapable de créer le répertoire de session \"%s\"."
+
+#: ../libextl/luaextl.c:117
+msgid "Lua stack full."
+msgstr "Pile Lua pleine."
+
+#
+#: ../libextl/luaextl.c:143
+msgid "Unknown Lua error."
+msgstr "Erreur Lua inconnue."
+
+#: ../libextl/luaextl.c:490
+msgid "Stack trace:"
+msgstr "tracage de pile:"
+
+#: ../libextl/luaextl.c:497
+#, c-format
+msgid ""
+"\n"
+"(Unable to get debug info for level %d)"
+msgstr ""
+"\n"
+"(Incapable d'obtenir les informations de déboggage pour le niveau %d)"
+
+#: ../libextl/luaextl.c:515
+msgid ""
+"\n"
+"  [Skipping unnamed C functions.]"
+msgstr ""
+"\n"
+"  [Evitement de la fonction C annonyme.]"
+
+#: ../libextl/luaextl.c:566
+msgid "Internal error."
+msgstr "Erreur interne"
+
+#: ../libextl/luaextl.c:585
+msgid "Unable to initialize Lua."
+msgstr "Incapable d'initialiser Lua."
+
+#: ../libextl/luaextl.c:1336
+msgid "Too many return values. Use a C compiler that has va_copy to support more."
+msgstr "Trop de valeurs renvoyées. Utilisez un compileur C qui a un va_copy pour en suporter plus"
+
+#: ../libextl/luaextl.c:1356
+msgid "Returned dead object."
+msgstr "A renvoyé un objet mort."
+
+#: ../libextl/luaextl.c:1359
+#, c-format
+msgid "Invalid return value (expected '%c', got lua type \"%s\")."
+msgstr "Valeur retournée invalide (attendu %c, de type lua \"%s\")."
+
+#: ../libextl/luaextl.c:1395 ../libextl/luaextl.c:1750
+msgid "Stack full."
+msgstr "Pile pleine."
+
+#: ../libextl/luaextl.c:1761
+#, c-format
+msgid "Argument %d to %s is a dead object."
+msgstr "Argument %d à %s est un objet mort."
+
+#: ../libextl/luaextl.c:1764
+#, c-format
+msgid ""
+"Argument %d to %s is of invalid type. (Argument template is '%s', got lua "
+"type %s)."
+msgstr ""
+"Argument %d à %s est de type invalide. (Le modèle d'argument est '%s', ave le "
+"type lua %s)."
+
+#: ../libextl/luaextl.c:1827
+msgid "L1 call handler upvalues corrupt."
+msgstr "upvalue niveau 1 de la pile d'appel corrompue"
+
+#: ../libextl/luaextl.c:1832
+msgid "Called function has been unregistered."
+msgstr "La fonction invoquée a été désenregistrée."
+
+#: ../libextl/luaextl.c:1843
+#, c-format
+msgid "Attempt to call an unsafe function \"%s\" in restricted mode."
+msgstr "Temptative d'appel d'une fonction non-sécurisée \"%s\" en mode restreint."
+
+#: ../libextl/luaextl.c:1956
+#, c-format
+msgid "Function '%s' has more parameters than the level 1 call handler can handle"
+msgstr "La fonction '%s' a plus de paramètres que le niveau 1 de la pile d'appel puisse supporter"
+
+#
+#: ../libextl/luaextl.c:2347
+msgid "Maximal serialisation depth reached."
+msgstr "Profondeur de sérialisation maximale atteinte."
+
+#: ../libextl/luaextl.c:2368
+#, c-format
+msgid "Unable to serialise type %s."
+msgstr "Incapable de sérialiser le type %s."
+
+#: ../libextl/luaextl.c:2399
+msgid "-- This file has been generated by Ion. Do not edit.\n"
+msgstr "-- Ce fichier a été généré par Ion, Ne pas éditer.\n"
+
+#: ../libextl/misc.c:17
+#, c-format
+msgid ""
+"Type checking failed in level 2 call handler for parameter %d (got %s, "
+"expected %s)."
+msgstr ""
+"Le contrôle de type a échoué au niveau 2 de la pile d'appel au paramètre %d "
+"(obtenu %s, attendu %s)."
+
+msgid "Scroll the message or completions up/down."
+msgstr "Parcourrir le message ou les complétions en haut/bas."
+
+msgid "Close the query/message box, not executing bound actions."
+msgstr "Fermer la boite de requètes/messages, ne pas exécuter les actions lièes."
+
+msgid "Close the query and execute bound action."
+msgstr "Fermer la requète et exécuter les actions liées."
+
+msgid "Complete from history"
+msgstr "Compléter depuis l'historique."
+
+msgid "Try to complete the entered text or cycle through completions."
+msgstr "Essayer de compléter le texte entré ou parcourrir les complétions."
+
+#
+msgid "Clear mark/cancel selection."
+msgstr "Effacer/annuler la sélection"
+
+#
+msgid "Copy selection."
+msgstr "Copier la sélection."
+
+#
+msgid "Cut selection."
+msgstr "Couper la sélection."
+
+#
+msgid "Set mark/begin selection."
+msgstr "Définir le début de la sélection."
+
+msgid "Paste from the clipboard."
+msgstr "Coller depuis le presse papier."
+
+msgid "Select next/previous (matching) history entry."
+msgstr "Sélectionner l'entrèe (correspondante) suivante/précédente dans l'historique"
+
+msgid "Transpose characters."
+msgstr "Transposer le caractère."
+
+msgid "Delete the whole line."
+msgstr "Effacer toute la ligne."
+
+msgid "Delete to end of line."
+msgstr "Effacer jusqu'a la fin de la ligne."
+
+msgid "Delete one word forward/backward."
+msgstr "Effacer un mot en avant/arrière."
+
+msgid "Delete previous character."
+msgstr "Effacer le caractère précédent."
+
+msgid "Delete next character."
+msgstr "Effacer le caractère suivant."
+
+msgid "Skip one word forward/backward."
+msgstr "Sauter un mot en avant/arrière."
+
+msgid "Go to end/beginning."
+msgstr "Aller au début / à la fin"
+
+msgid "Move one character forward/backward."
+msgstr "Déplacer d'un caractère en avant/arrière."
+
+msgid "Kill"
+msgstr "Tuer"
+
+msgid "Attach tagged"
+msgstr "Attacher Marqués"
+
+msgid "Rename"
+msgstr "Renommer"
+
+msgid "Close"
+msgstr "Fermer"
+
+msgid "De/reattach"
+msgstr "Dé/attacher"
+
+msgid "Toggle tag"
+msgstr "(dès)Activer le marquage"
+
+msgid "Window info"
+msgstr "Informations fenêtre"
+
+msgid "Clear tags"
+msgstr "Effacer les marqueurs"
+
+msgid "Exit"
+msgstr "Sortir"
+
+msgid "Restart TWM"
+msgstr "Redémarrer TWM"
+
+msgid "Restart"
+msgstr "Redémarrer"
+
+msgid "Save"
+msgstr "Sauvegarder"
+
+msgid "Session"
+msgstr "Sessions"
+
+msgid "Styles"
+msgstr "Styles"
+
+msgid "About Ion"
+msgstr "A Propos de Ion"
+
+msgid "Help"
+msgstr "Aide"
+
+msgid "Lock screen"
+msgstr "Vérouiller l'écran"
+
+msgid "Terminal"
+msgstr "Termial"
+
+#
+msgid "Run..."
+msgstr "Exécuter..."
+
+#
+msgid "Move in specified direction."
+msgstr "Déplacer dans la direction spécifiée."
+
+msgid "Shrink in specified direction."
+msgstr "Réduire dans la direction spécifiée."
+
+#
+msgid "Grow in specified direction."
+msgstr "Agrandir dans la dimension spécifiée."
+
+msgid "End the resize mode."
+msgstr "mettre fin au mode de redimensionnement."
+
+msgid "Cancel the resize mode."
+msgstr "Annuler le mode redimensionnement."
+
+msgid "Move the frame."
+msgstr "Déplacer le cadre."
+
+msgid "Lower the frame."
+msgstr "Descendre le cadre"
+
+#
+msgid "Raise the frame."
+msgstr "Monter le cadre"
+
+msgid "Toggle shade mode"
+msgstr "basculer l'état shade"
+
+msgid "Attach tagged objects to this frame."
+msgstr "Attacher les objets marqués à ce cadre."
+
+msgid "Maximize the frame horizontally/vertically."
+msgstr "Maximiser le cadre horizontalement/verticalement"
+
+msgid "Move current object within the frame left/right."
+msgstr "Déplacer l'objet courrant dans le cadre à gauche/droite."
+
+msgid "Switch to next/previous object within the frame."
+msgstr "Basculer vers l'objet suivan,t/précédent dans le cadre."
+
+msgid "Switch to n:th object within the frame."
+msgstr "Basculer vers l'objet n:th dans le cadre."
+
+#
+msgid "Query for a client window to attach."
+msgstr "Demande pour une fenêtre cliente a attacher."
+
+msgid "Move objects between frames by dragging and dropping the tab."
+msgstr "Déplacer les objets entre les cadres en glissant et déposant le signet."
+
+msgid "Resize the frame."
+msgstr "Redimensionner le cadre."
+
+msgid "Switch the frame to display the object indicated by the tab."
+msgstr "Activer le cadre pour afficher l'objet indiqué part le signet."
+
+msgid "Begin move/resize mode."
+msgstr "Démarrer le mode déplacer/redimensionner."
+
+msgid "Display context menu."
+msgstr "Afficher le menu contextuel."
+
+#
+msgid "Query for a client window to go to."
+msgstr "Demande pour une fençetre cliente vers laquelle aller."
+
+msgid "Query for workspace to go to or create a new one."
+msgstr "Demande d'un espace de travail vers lequel aller ou de cration d'un nouveau."
+
+msgid "Query for file to view."
+msgstr "Demande d'un fichier pour visualisation."
+
+msgid "Query for file to edit."
+msgstr "Demande d'un fichier pour l'édition."
+
+msgid "Query for host to connect to with SSH."
+msgstr "Demande de connexion de l'hôte via SSH."
+
+msgid "Query for Lua code to execute."
+msgstr "Demande d'exécution d'un code Lua."
+
+msgid "Query for command line to execute."
+msgstr "Demande d'exécution d'une ligne de commande."
+
+#
+msgid "Run a terminal emulator."
+msgstr "Lancer un émulateur de terminal."
+
+msgid "Show the Ion manual page."
+msgstr "Afficher la page de manuel de Ion."
+
+msgid "Query for manual page to be displayed."
+msgstr "Demande pour l'affichage de pages de manuel."
+
+msgid "Toggle tag of current object."
+msgstr "Basculer le marqueur de l'objet courrant."
+
+msgid "Detach (float) or reattach an object to its previous location."
+msgstr "Détacher (float) ou réattacher un objet à sa position précédente."
+
+msgid "Close current object."
+msgstr "Fermer l'objet courrant."
+
+msgid "Toggle client window group full-screen mode"
+msgstr "Basculer le groupe de fenêtre client en mode plein écran."
+
+#
+msgid ""
+"Send next key press to the client window. Some programs may not allow this "
+"by default."
+msgstr ""
+"Envoyer le prochain pressage de touche a la fenêtre de client. certains programmes"
+"n'autoriseront pas celà par default"
+
+#
+msgid "Kill client owning the client window."
+msgstr "Tuer le client qui gère la fenêtre de client."
+
+#
+msgid ""
+"Nudge the client window. This might help with some programs' resizing "
+"problems."
+msgstr ""
+"Secouer la fenêtre de client. Celà peut aider pour les problèmes de "
+"redimentionnement de certains programmes."
+
+msgid "Raise focused object, if possible."
+msgstr "Remonter l'objet ayant le focus, si possible."
+
+msgid "Backward-circulate focus."
+msgstr "Décrémenter le focus."
+
+msgid "Forward-circulate focus."
+msgstr "Incrémenter le focus."
+
+msgid "Display the window list menu."
+msgstr "Affiche le menu de listage des fenêtres."
+
+msgid "Display the main menu."
+msgstr "Affiche le menu principal."
+
+#
+#
+msgid "Create a new workspace of chosen default type."
+msgstr "Créer un nouvel espace de travail du type par défault choisis."
+
+#
+msgid "Go to next/previous screen on multihead setup."
+msgstr "Aller sur l'écran suivant/précédent sur une configuration multihead."
+
+#
+msgid "Go to n:th screen on multihead setup."
+msgstr "Aller sur l'écran n:th sur une configuration multihead."
+
+#
+msgid "Clear all tags."
+msgstr "Effacer tous les marqueurs."
+
+msgid "Go to first region demanding attention or previously active one."
+msgstr "Aller dans la première région qui demande de l'attention ou la dernière active."
+
+#
+msgid "Switch to next/previous object within current screen."
+msgstr "basculer vers l'objet suivant/précédent dans l'écran en cours."
+
+#
+msgid ""
+"Switch to n:th object (workspace, full screen client window) within current "
+"screen."
+msgstr ""
+"Basculer vers l'objet n:th (Espace de travail, fenêtre de clien plein écran) dans l'écran"
+"courrant."
+
+msgid "List"
+msgstr "Liste"
+
+msgid "New"
+msgstr "Nouveau"
+
+msgid "Dillo"
+msgstr "Dillo"
+
+msgid "Konqueror"
+msgstr "Konqueror"
+
+msgid "Links"
+msgstr "Links"
+
+msgid "Opera"
+msgstr "Opera"
+
+msgid "Rxvt"
+msgstr "Rxvt"
+
+msgid "W3M"
+msgstr "W3M"
+
+msgid "XTerm"
+msgstr "XTerm"
+
+#
+msgid "Workspaces"
+msgstr "Espaces de travail"
+
+msgid "Programs"
+msgstr "Programmes"
+
+msgid "Show the PWM manual page."
+msgstr "Afficher le manuel de PWM."
+
+msgid "Toggle scratchpad."
+msgstr "Basculer vers le Bloc note."
+
+msgid ""
+"\n"
+"%sClass: %s\n"
+"%sRole: %s\n"
+"%sInstance: %s\n"
+"%sXID: 0x%x"
+msgstr ""
+"\n"
+"%sClasse: %s\n"
+"%sRole: %s\n"
+"%sInstance: %s\n"
+"%sXID: 0x%x"
+
+msgid "No entry '%s'"
+msgstr "pas d'entrée '%s'"
+
+msgid "%s:"
+msgstr "%s:"
+
+msgid "Missing submenu "
+msgstr "Sous menu manquant"
+
+msgid "Unknown menu %s."
+msgstr "Menu Inconnu %s."
+
+msgid "Lua code:"
+msgstr "code Lua:"
+
+msgid "Manual page (%s):"
+msgstr "Page de manuel (%s):"
+
+msgid "SSH to:"
+msgstr "SSH vers:"
+
+msgid "Failed to open ~/.ssh/config"
+msgstr "Echec d'ouverture ~/.ssh/config"
+
+msgid "Failed to open ~/.ssh/known_hosts"
+msgstr "Echec d'ouverture ~/.ssh/known_hosts"
+
+msgid "Run:"
+msgstr "Exécuter:"
+
+msgid "View file:"
+msgstr "Voir le fichier:"
+
+msgid "Edit file:"
+msgstr "Editer le fichier:"
+
+msgid "Workspace name:"
+msgstr "Nom de l'espace de travail:"
+
+msgid "Frame name:"
+msgstr "Nom du cadre:"
+
+msgid "Restart Ion (y/n)?"
+msgstr "Redémarrer Ion (y/n)?"
+
+msgid "Exit Ion/Shutdown session (y/n)?"
+msgstr "Quiter Ion/Fermer la session (y/n)?"
+
+msgid "Go to or create workspace:"
+msgstr "Aller à ou créer l'espace de travail:"
+
+msgid "Attach window:"
+msgstr "Attacher la fenêtre:"
+
+msgid "Go to window:"
+msgstr "Aller à la fenêtre:"
+
+msgid "New workspace layout (default):"
+msgstr "Nouvelle disposition d'espace de travail (default):"
+
+msgid "Unknown error"
+msgstr "Erreur inconnue"
+
+msgid "Unknown layout"
+msgstr "Disposition inconnue"
+
+msgid "Cannot attach: different root windows."
+msgstr "Ne peut attacher: différentes fenêtres racine."
+
+msgid "Could not find client window %s."
+msgstr "Ne peut trouver la fenêtre de client %s."
+
+msgid "Too much result data"
+msgstr "Trop de donnée résultantes"
+
+msgid "Could not find %s"
+msgstr "Ne peut trouver %s"
+
+msgid "Not a directory."
+msgstr "N'est pas un répertoire."
+
+msgid "Invalid command"
+msgstr "Commande invalide"
+
+msgid "Error in command string: "
+msgstr "Erreur dans la ligne de commande: "
+
+msgid "Error compiling guard: %s"
+msgstr "Erreur de compilation du garde: %s"
+
+msgid "Invalid guard %s."
+msgstr "Garde invalide %s."
+
+msgid "Main menu:"
+msgstr "Menu Principal:"
+
+msgid "Context menu:"
+msgstr "Menu Contextuel:"
+
+msgid "Floating frame"
+msgstr "Cadre flottant"
+
+msgid "Tiled frame"
+msgstr "Cadre Empilé"
+
+msgid "Tiling"
+msgstr "Empilement"
+
+#
+msgid "Workspace"
+msgstr "Espace de travail"
+
+msgid "Screen"
+msgstr "Ecran"
+
+msgid "Frame"
+msgstr "Cadre"
+
+msgid "Recursive table - unable to deepcopy"
+msgstr "Table récursive - incapable de deepcopy"
+
+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 ""
+"Application des mappages d'urgence suivants:\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 "Incapable d'associer a un menu non-table"
+
+msgid "Cannot save selection."
+msgstr "Ne peut sauver la sélection."
+
+msgid "Save look selection in %s?"
+msgstr "Sauvegarder la sélection de look dans %s?"
+
+msgid "ion-statusd quit."
+msgstr "ion-statusd quite."
+
+msgid "Errors starting ion-statusd:\n"
+msgstr "Erreur de lancement de ion-statusd:\n"
+
+msgid "Failed to start ion-statusd."
+msgstr "Echec de lancement de ion-statusd."
+
+msgid "Screen not found."
+msgstr "Ecran non trouvé."
+
+msgid "Screen already has an stdisp. Refusing to create a statusbar."
+msgstr "L'écra a déja un stdisp. Refus de création d'une barre de status."
+
+msgid "Failed to create statusbar."
+msgstr "Echec de la création de la barre de status."
+
+msgid "Split current frame vertically."
+msgstr "Scinder le cadre courrant verticalement"
+
+msgid "Go to frame above/below/right/left of current frame."
+msgstr "Aller au cadre sous/sur/droite/gauche du cadre courrant."
+
+msgid "Split current frame horizontally."
+msgstr "Sciender le cadre courrant horizontalement"
+
+msgid "Destroy current frame."
+msgstr "Detruire le cadre courrant."
+
+msgid "Tile frame, if no tiling exists on the workspace"
+msgstr "Empiler le cadre, si aucun empuilement n'existe sur l'espace de travail"
+
+msgid "Destroy frame"
+msgstr "Detruire le cadre"
+
+msgid "Split vertically"
+msgstr "Scinder Verticalement"
+
+msgid "Split horizontally"
+msgstr "Sciender Horizontalement"
+
+msgid "Flip"
+msgstr "Tourner"
+
+msgid "Transpose"
+msgstr "Transposer"
+
+msgid "Untile"
+msgstr "Désempiler"
+
+msgid "Float split"
+msgstr "Rupture flotante"
+
+msgid "At left"
+msgstr "A gauche"
+
+msgid "At right"
+msgstr "A droite"
+
+msgid "Above"
+msgstr "Dessus"
+
+msgid "Below"
+msgstr "Sous"
+
+msgid "At root"
+msgstr "A la racine"
+
+msgid "New tiling"
+msgstr "Nouvel empilement"
+
+msgid "Close the menu."
+msgstr "fermer le menu."
+
+#
+#
+msgid "Activate current menu entry."
+msgstr "Activer l'entrée courrante du menu."
+
+msgid "Select next/previous menu entry."
+msgstr "Choisir l'entrée suivante/précédente du menu."
+
+msgid "Clear the menu's typeahead find buffer."
+msgstr "Effacer le tampon d'autocomplétion du menu."
+
+msgid "Toggle floating dock."
+msgstr "(dès)activer le doc flottant."
+
+msgid "Pos-TL"
+msgstr "position HG"
+
+msgid "Pos-TR"
+msgstr "position HD"
+
+msgid "Pos-BL"
+msgstr "position BG"
+
+msgid "Pos-BR"
+msgstr "position BD"
+
+msgid "Grow-L"
+msgstr "Agrandir vers la gauche"
+
+msgid "Grow-R"
+msgstr "Agrandir vers le droite"
+
+msgid "Grow-U"
+msgstr "Agrandir vers le haut"
+
+msgid "Grow-D"
+msgstr "Agrandir vers le bas"
+
+msgid "press"
+msgstr "presser"
+
+msgid "click"
+msgstr "clic"
+
+msgid "drag"
+msgstr "glisser"
+
+msgid "double click"
+msgstr "double clic"
+
+msgid "%s %s"
+msgstr "%s %s"
+
+msgid "%s %s at %s"
+msgstr "%s %s na %s"
+
index c6165a70d993ce151b6a4fc5984ae12111f2612e..32db47c60e282321eddd13a6aa490d94ebda836f 100644 (file)
--- a/system.mk
+++ b/system.mk
@@ -66,8 +66,8 @@ LUAC=$(LUA_DIR)/bin/luac
 # what you want.
 #LUA_LIBS=`pkg-config --libs lua5.1`
 #LUA_INCLUDES=`pkg-config --cflags lua5.1`
-#LUA=`which lua5.1`
-#LUAC=`which luac5.1`
+#LUA=/usr/bin/lua5.1
+#LUAC=/usr/bin/luac5.1
 
 
 ##
@@ -115,6 +115,9 @@ DEFINES += -DCF_XFREE86_TEXTPROP_BUG_WORKAROUND
 #EXTRA_LIBS += -lintl
 #EXTRA_INCLUDES +=
 
+# clock_gettime for monotonic time
+EXTRA_LIBS += -lrt
+
 
 ##
 ## C compiler
index e974d11bba5abafed8c45db28b1adc3c81cf7c54..659500f51fb178c1c9be034223f281583529587b 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/build/system-inc.mk
 
 LIBS += $(LIBTU_LIBS)
 INCLUDES += $(LIBTU_INCLUDES)
-CFLAGS += $(XOPEN_SOURCE)
+CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE)
 
 SOURCES=ion-completefile.c
 
index 6e68e0acbbbb157264edfe207345e81f1efb80c1..3ae3c686707fa2317bf11784660f5da1e061b745 100644 (file)
@@ -54,6 +54,7 @@
 
 #include <sys/param.h>
 #include <sys/types.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <dirent.h>
 #include <string.h>
index d33136afee29f339fb5a25842a0505b265f3e1e6..587f7f637b27407022b1b778150c7260e41ae921 100644 (file)
--- a/version.h
+++ b/version.h
@@ -1,2 +1,2 @@
-#define ION_VERSION "3rc-20070506"
-#define ION_API_VERSION "3-"ION_VERSION
+#define ION_VERSION "3rc-20070608"
+#define ION_API_VERSION "3"