From: Ben Hutchings Date: Wed, 27 Jun 2007 22:02:56 +0000 (+0000) Subject: [svn-upgrade] Integrating new upstream version, ion3 (20070608) X-Git-Tag: 20070608 X-Git-Url: https://git.decadent.org.uk/gitweb/?p=ion3.git;a=commitdiff_plain;h=1cd244db6df1337d594b9e2456c735cbc28aea6c [svn-upgrade] Integrating new upstream version, ion3 (20070608) --- diff --git a/ChangeLog b/ChangeLog index 4410265..0bbfa9c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,154 @@ +2007-06-08 16:55 UTC Tuomo Valkonen + tagged ion-3rc-20070608 + +2007-06-08 16:55 UTC Tuomo Valkonen + * Release notes + +2007-06-08 16:04 UTC Tuomo Valkonen + * Bah, too many indirect deps from Xmu; reimplement the wh^Wmacros. + +2007-06-08 15:57 UTC Tuomo Valkonen + * X selection code tuning + +2007-06-06 18:10 UTC Tuomo Valkonen + * Use getloadavg(3) instead of /proc/loadavg or `uptime` in statusd. + +2007-06-05 19:21 UTC Tuomo Valkonen + * Updated configuration document name in man pages + +2007-06-05 15:15 UTC Tuomo Valkonen + * 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 + * Fixed uninitialised variables + +2007-05-30 18:12 UTC Tuomo Valkonen + * Fixed stdisp split tree node dodging + +2007-05-29 21:09 UTC Tuomo Valkonen + * Oops, hidden and pseudomodal flags used the same bit + +2007-05-28 19:59 UTC Tuomo Valkonen + * Document 'bottom' parameter to WGroup.attach_new + +2007-05-28 17:50 UTC Tuomo Valkonen + * Don't redraw full listing on completion cycle + +2007-05-28 08:14 UTC Tuomo Valkonen + * Bah, removed redundant statement + +2007-05-26 14:08 UTC Tuomo Valkonen + * fix + +2007-05-26 14:00 UTC Tuomo Valkonen + * More name policy refinements + (Removed "ion soup" and replaced with explicit patch requests + by the user.) + +2007-05-24 20:57 UTC Tuomo Valkonen + * 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 + * set_stdisp doc update + +2007-05-20 19:37 UTC Tuomo Valkonen + * Some "clean" style tuning + +2007-05-20 19:19 UTC Tuomo Valkonen + * Added $(C99_SOURCE) to ion-completefile CFLAGS + +2007-05-20 17:09 UTC Tuomo Valkonen + * 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 + * Made statusd startup timeout non-fatal + +2007-05-20 14:58 UTC Tuomo Valkonen + * popen_bgread doc improvement + +2007-05-18 07:03 UTC Tuomo Valkonen + * Some improvements to name policy explanations + +2007-05-17 16:51 UTC Tuomo Valkonen + * 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 + * ioncore.popen_bgread doc fix + +2007-05-14 16:13 UTC Tuomo Valkonen + * Ungrabbed submaps had stopped working. Fixed. + +2007-05-12 19:21 UTC Tuomo Valkonen + * Missing stdio.h header in ion-completefile + +2007-05-12 14:25 UTC Tuomo Valkonen + * WTF is strcasecmp doing in strings.h and not string.h on some systems? + +2007-05-10 13:39 UTC Tuomo Valkonen + * Removed references to no longer existent layers + +2007-05-08 22:41 UTC Tuomo Valkonen + * A bit more better wording + +2007-05-08 16:01 UTC Tuomo Valkonen + * Fixed unsplit + +2007-05-08 15:56 UTC Tuomo Valkonen + * Fixed tiling emergency restore code + +2007-05-08 15:25 UTC Tuomo Valkonen + * Binding fn. doc. fixes + +2007-05-08 15:23 UTC Tuomo Valkonen + * "Improved" stacking traversal code wasn't considering fallback. + +2007-05-07 20:55 UTC Tuomo Valkonen + * 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 + * Do not try to automatically launch statusd if config file launch fails + +2007-05-07 15:22 UTC Tuomo Valkonen + * Fixed statusd-not-found message + +2007-05-07 08:34 UTC Tuomo Valkonen + * Doc. notation fix + +2007-05-07 08:31 UTC Tuomo Valkonen + * Added some documentation and commented-out settings to cfg_ion.lua + +2007-05-06 20:50 UTC Tuomo Valkonen + * Better wording of name policy + (Author instead of copyright/trademark holder.) + 2007-05-06 14:43 UTC Tuomo Valkonen tagged ion-3rc-20070506 diff --git a/LICENSE b/LICENSE index b5cf6d2..c4ba1e8 100644 --- 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. + --- diff --git a/RELNOTES b/RELNOTES index 4a3998e..842c6b6 100644 --- 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 ---------------- diff --git a/doc/ChangeLog b/doc/ChangeLog index c73b316..221c8d8 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,6 @@ +2007-06-08 16:58 UTC Tuomo Valkonen + tagged ion-doc-3rc-20070608 + 2007-05-06 14:40 UTC Tuomo Valkonen tagged ion-doc-3rc-20070506 diff --git a/doc/exact-version b/doc/exact-version index 8549f12..1cad080 100644 --- a/doc/exact-version +++ b/doc/exact-version @@ -1,5 +1,5 @@ Context: -[TAG ion-doc-3rc-20070506 -Tuomo Valkonen **20070506144001] +[TAG ion-doc-3rc-20070608 +Tuomo Valkonen **20070608165851] diff --git a/doc/ionconf.dvi.gz b/doc/ionconf.dvi.gz index f7e0ba9..9443df7 100644 Binary files a/doc/ionconf.dvi.gz and b/doc/ionconf.dvi.gz differ diff --git a/doc/ionconf.ps.gz b/doc/ionconf.ps.gz index c59b71a..0bd7cfb 100644 Binary files a/doc/ionconf.ps.gz and b/doc/ionconf.ps.gz differ diff --git a/doc/ionconf.tex b/doc/ionconf.tex index 1bd52af..30fb07a 100644 --- a/doc/ionconf.tex +++ b/doc/ionconf.tex @@ -10,7 +10,7 @@ \title{Configuring and extending Ion3 with Lua} \author{Tuomo Valkonen \\ tuomov at iki.fi} -\date{2007-05-06} +\date{2007-06-08} \makeindex diff --git a/doc/ionconf/images.log b/doc/ionconf/images.log index aee5f70..e931a23 100644 --- a/doc/ionconf/images.log +++ b/doc/ionconf/images.log @@ -1,4 +1,4 @@ -This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) (format=latex 2007.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 diff --git a/doc/ionconf/images.tex b/doc/ionconf/images.tex index 2912e90..4906f84 100644 --- a/doc/ionconf/images.tex +++ b/doc/ionconf/images.tex @@ -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} diff --git a/doc/ionconf/img1.png b/doc/ionconf/img1.png index 9d458d5..ef6ac05 100644 Binary files a/doc/ionconf/img1.png and b/doc/ionconf/img1.png differ diff --git a/doc/ionconf/img2.png b/doc/ionconf/img2.png index d681364..fbbef0c 100644 Binary files a/doc/ionconf/img2.png and b/doc/ionconf/img2.png differ diff --git a/doc/ionconf/img3.png b/doc/ionconf/img3.png index 38071fe..4f60c17 100644 Binary files a/doc/ionconf/img3.png and b/doc/ionconf/img3.png differ diff --git a/doc/ionconf/img4.png b/doc/ionconf/img4.png index 3d3a3ef..17e520f 100644 Binary files a/doc/ionconf/img4.png and b/doc/ionconf/img4.png differ diff --git a/doc/ionconf/img5.png b/doc/ionconf/img5.png index 38fbe56..eab0084 100644 Binary files a/doc/ionconf/img5.png and b/doc/ionconf/img5.png differ diff --git a/doc/ionconf/img6.png b/doc/ionconf/img6.png index 3601ccb..c7c8364 100644 Binary files a/doc/ionconf/img6.png and b/doc/ionconf/img6.png differ diff --git a/doc/ionconf/index.html b/doc/ionconf/index.html index 4783107..7bc2dea 100644 --- a/doc/ionconf/index.html +++ b/doc/ionconf/index.html @@ -57,7 +57,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

Tuomo Valkonen

tuomov at iki.fi

-

2007-05-06

+

2007-06-08

diff --git a/doc/ionconf/ionconf.html b/doc/ionconf/ionconf.html index 4783107..7bc2dea 100644 --- a/doc/ionconf/ionconf.html +++ b/doc/ionconf/ionconf.html @@ -57,7 +57,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

Tuomo Valkonen

tuomov at iki.fi

-

2007-05-06

+

2007-06-08

diff --git a/doc/ionconf/node11.html b/doc/ionconf/node11.html index 9803649..e81317d 100644 --- a/doc/ionconf/node11.html +++ b/doc/ionconf/node11.html @@ -72,13 +72,13 @@ Index

winprop : 3.5.2
clientwin_do_manage_alt - : 6.9 + : 6.9
clientwin_mapped_hook - : 6.9 + : 6.9
clientwin_property_change_hook - : 6.9 + : 6.9
clientwin_unmapped_hook - : 6.9 + : 6.9
Control : 3.3.5
defmenu @@ -90,7 +90,7 @@ Index
float : 3.5
frame_managed_changed_hook - : 6.9 + : 6.9
fullscreen : 3.5
ignore_resizeinc @@ -108,15 +108,15 @@ Index
winprop : 3.5.2
ioncore_deinit_hook - : 6.9 + : 6.9
ioncore_post_layout_setup_hook - : 6.9 + : 6.9
ioncore_sigchld_hook - : 6.9 + : 6.9
ioncore_snapshot_hook - : 6.9 + : 6.9
ioncore_submap_ungrab_hook - : 6.9 + : 6.9
is_dockapp
winprop : 3.5.2
@@ -157,9 +157,9 @@ Index
PREFIX : 3.1
region_do_warp_alt - : 6.9 + : 6.9
region_notify_hook - : 6.9 + : 6.9
role
winprop : 3.5.2
@@ -170,7 +170,7 @@ Index
X : 2.2.1
screen_managed_changed_hook - : 6.9 + : 6.9
ScrollLock : 3.3.5
Shift @@ -190,7 +190,7 @@ Index
target : 3.5
tiling_placement_alt - : 6.9 + : 6.9
transient : 3.5.3
transient_mode diff --git a/doc/ionconf/node13.html b/doc/ionconf/node13.html index b65d8cd..4ad5218 100644 --- a/doc/ionconf/node13.html +++ b/doc/ionconf/node13.html @@ -70,7 +70,7 @@ Mathematics Department, Macquarie University, Sydney. The command line arguments were:
latex2html -show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 3 ionconf

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


diff --git a/doc/ionconf/node7.html b/doc/ionconf/node7.html index 11dd84a..7b6bec8 100644 --- a/doc/ionconf/node7.html +++ b/doc/ionconf/node7.html @@ -291,7 +291,7 @@ The string guard maybe set to pose limits on _sub. Currently
Description:
Define bindings for context context. Here binding is a table composed of entries created with ioncore.kpress, - etc.; see section 3.3 for details. + etc.; see Section 3.3 for details.
@@ -1023,9 +1023,11 @@ Note that this function is asynchronous; the region will not
Description:
-
Run cmd with a read pipe connected to its stdout. - When data is received through the pipe, handler is called - with that data. +
Run cmd with a read pipe connected to its stdout and stderr. + When data is received through one of these pipes, h or errh + is called with that data. When the pipe is closed, the handler is called + with nil argument. The PID of the new process is returned, or + -1 on error.
@@ -1523,8 +1525,9 @@ When a keyboard resize function is called, and at most kbresize_t_max
Description:
Creates a binding description table for the action of pressing a key given - by keyspec (with possible modifiers) to the function func. - For more information on bindings, see section 3.3. + by keyspec (with possible modifiers) to the function cmd. + The guard controls when the binding can be called. + For more informationp see Section 3.3.
@@ -1539,10 +1542,10 @@ When a keyboard resize function is called, and at most kbresize_t_max
Description:
-
This is similar to kpress but after calling cmd, +
This is similar to ioncore.kpress but after calling cmd, Ioncore waits for all modifiers to be released before processing any further actions. - For more information on bindings, see section 3.3. + For more information on bindings, see Section 3.3.
@@ -1604,8 +1607,8 @@ When a keyboard resize function is called, and at most kbresize_t_max
Description:
Creates a binding description table for the action of clicking a mouse button while possible modifier keys are pressed, - both given by buttonspec, to the function func. - For more information, see section 3.3. + both given by buttonspec, to the function cmd. + For more information, see Section 3.3.
@@ -1620,8 +1623,8 @@ When a keyboard resize function is called, and at most kbresize_t_max
Description:
-
Similar to mclick but for double-click. - Also see section 3.3. +
Similar to ioncore.mclick but for double-click. + Also see Section 3.3.
@@ -1677,8 +1680,8 @@ When a keyboard resize function is called, and at most kbresize_t_max
Description:
-
Similar to mclick but for just pressing the mouse button. - Also see section 3.3. +
Similar to ioncore.mclick but for just pressing the mouse button. + Also see Section 3.3.
@@ -1704,14 +1707,14 @@ When a keyboard resize function is called, and at most kbresize_t_max
Synopsis:
-
ioncore.submap(kcb_, list) +
ioncore.submap(keyspec, list)
Description:
Returns a function that creates a submap binding description table. When the key press action keyspec occurs, Ioncore will wait for a further key presse and act according to the submap. - For details, see section 3.3. + For details, see Section 3.3.
@@ -2112,6 +2115,10 @@ When a keyboard resize function is called, and at most kbresize_t_max sizepolicy (string) Size policy; see Section 6.10.1. +bottom +(boolean) Mark the attached region as the + ``bottom'' of ws. +

@@ -2565,8 +2572,8 @@ In addition parameters to the region to be created are passed in this

Description:
-
Returns the n:th object managed by mplex on the - l:th layer. +
Returns the n:th object on the mutually exclusive + list of mplex.
@@ -2640,13 +2647,16 @@ In addition parameters to the region to be created are passed in this Description pos -The corner of the screen to place the status display - in: one of `tl', `tr', `bl' +(string) The corner of the screen to place the status + display in: one of `tl', `tr', `bl' or `br'. +fullsize +(boolean) Waste all available space. + action -If this field is set to `keep', corner - and orientation are changed for the existing +(string) If this field is set to `keep', + pos and fullsize are changed for the existing status display. If this field is set to `remove', the existing status display is removed. If this field is not set or is set to `replace', a @@ -3802,7 +3812,7 @@ Note that this function is asynchronous; the region will not
Description:
-
Flip contents of node. +
Flip contents of split.
@@ -5572,8 +5582,8 @@ Any parameters not explicitly set in conftab will be left unchanged. pos string -Position: "tl", "tr", - "bl" or "br" +Position: `tl', `tr', + `bl' or `br' (for the obvious combinations of top/left/bottom/right). @@ -5834,7 +5844,7 @@ Any parameters not explicitly set in conftab will be left unchanged.

-
+
Hook name:
@@ -5906,7 +5916,7 @@ reg:attach(cwin)

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

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

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

-
+
Hook name:
@@ -6014,7 +6024,7 @@ reg:attach(cwin)

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

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

-
+
Hook name:
@@ -6076,7 +6086,7 @@ reg:attach(cwin)

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

-
+
Hook name:
@@ -6116,7 +6126,7 @@ reg:attach(cwin)

-
+
Hook name:
@@ -6168,7 +6178,7 @@ reg:attach(cwin)

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

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

-
+
Hook name:
diff --git a/doc/ionnotes.dvi.gz b/doc/ionnotes.dvi.gz index d69a4ee..4a24b16 100644 Binary files a/doc/ionnotes.dvi.gz and b/doc/ionnotes.dvi.gz differ diff --git a/doc/ionnotes.ps.gz b/doc/ionnotes.ps.gz index 1180c8a..fa9e0b0 100644 Binary files a/doc/ionnotes.ps.gz and b/doc/ionnotes.ps.gz differ diff --git a/doc/ionnotes/node9.html b/doc/ionnotes/node9.html index 288d589..3f29d03 100644 --- a/doc/ionnotes/node9.html +++ b/doc/ionnotes/node9.html @@ -70,7 +70,7 @@ Mathematics Department, Macquarie University, Sydney. The command line arguments were:
latex2html -show_section_numbers -short_index -local_icons -noaddress -up_url http://iki.fi/tuomov/ion/ -up_title 'Ion homepage' -nofootnode -split 4 ionnotes

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


diff --git a/etc/cfg_ion.lua b/etc/cfg_ion.lua index 790cc46..726d654 100644 --- a/etc/cfg_ion.lua +++ b/etc/cfg_ion.lua @@ -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' diff --git a/etc/look_newviolet.lua b/etc/look_newviolet.lua index 5647d5e..598dabc 100644 --- a/etc/look_newviolet.lua +++ b/etc/look_newviolet.lua @@ -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() diff --git a/etc/lookcommon_clean.lua b/etc/lookcommon_clean.lua index 49bf70a..6ffb7b4 100644 --- a/etc/lookcommon_clean.lua +++ b/etc/lookcommon_clean.lua @@ -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", diff --git a/exact-version b/exact-version index 09adb20..7bf3474 100644 --- a/exact-version +++ b/exact-version @@ -1,5 +1,5 @@ Context: -[TAG ion-3rc-20070506 -Tuomo Valkonen **20070506144318] +[TAG ion-3rc-20070608 +Tuomo Valkonen **20070608165559] diff --git a/ioncore/exec.c b/ioncore/exec.c index 65683dc..97f33b3 100644 --- a/ioncore/exec.c +++ b/ioncore/exec.c @@ -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 diff --git a/ioncore/frame-pointer.c b/ioncore/frame-pointer.c index 494a7b2..a99d0c6 100644 --- a/ioncore/frame-pointer.c +++ b/ioncore/frame-pointer.c @@ -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); diff --git a/ioncore/group.c b/ioncore/group.c index 9c67348..6bfdd9f 100644 --- a/ioncore/group.c +++ b/ioncore/group.c @@ -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 diff --git a/ioncore/ioncore.c b/ioncore/ioncore.c index 097801d..0f1744c 100644 --- a/ioncore/ioncore.c +++ b/ioncore/ioncore.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include diff --git a/ioncore/ioncore_bindings.lua b/ioncore/ioncore_bindings.lua index aa52c74..5f11967 100644 --- a/ioncore/ioncore_bindings.lua +++ b/ioncore/ioncore_bindings.lua @@ -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={} diff --git a/ioncore/kbresize.c b/ioncore/kbresize.c index 0a4e951..f91821c 100644 --- a/ioncore/kbresize.c +++ b/ioncore/kbresize.c @@ -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); diff --git a/ioncore/key.c b/ioncore/key.c index 4134ab7..ad7d179 100644 --- a/ioncore/key.c +++ b/ioncore/key.c @@ -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); } diff --git a/ioncore/mplex.c b/ioncore/mplex.c index 71943a4..0139176 100644 --- a/ioncore/mplex.c +++ b/ioncore/mplex.c @@ -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 diff --git a/ioncore/mplex.h b/ioncore/mplex.h index 08289f0..455c75b 100644 --- a/ioncore/mplex.h +++ b/ioncore/mplex.h @@ -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 */ diff --git a/ioncore/mplexpholder.c b/ioncore/mplexpholder.c index 623b60a..c3a57ce 100644 --- a/ioncore/mplexpholder.c +++ b/ioncore/mplexpholder.c @@ -183,7 +183,7 @@ void mplexpholder_deinit(WMPlexPHolder *ph) /*}}}*/ -/*{{{ Move, attach, layer */ +/*{{{ Move, attach */ typedef struct{ diff --git a/ioncore/mplexpholder.h b/ioncore/mplexpholder.h index be49317..7528f6d 100644 --- a/ioncore/mplexpholder.h +++ b/ioncore/mplexpholder.h @@ -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); diff --git a/ioncore/selection.c b/ioncore/selection.c index 95bf225..9b5c397 100644 --- a/ioncore/selection.c +++ b/ioncore/selection.c @@ -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); } diff --git a/ioncore/stacking.c b/ioncore/stacking.c index 9c0be9f..c96c538 100644 --- a/ioncore/stacking.c +++ b/ioncore/stacking.c @@ -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->levellevel>=STACKING_LEVEL_MODAL1) min_level=maxof(min_level, st->level); }while(st!=stacking); - return NULL; + return found; } diff --git a/libmainloop/signal.c b/libmainloop/signal.c index e87e154..f09d1db 100644 --- a/libmainloop/signal.c +++ b/libmainloop/signal.c @@ -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_usecwhen.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(¤t_time, NULL); + mainloop_gettime(¤t_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; diff --git a/libmainloop/signal.h b/libmainloop/signal.h index b05e20e..3eaa2fe 100644 --- a/libmainloop/signal.h +++ b/libmainloop/signal.h @@ -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 */ diff --git a/man/ion3.cs.in b/man/ion3.cs.in index 4d9044f..55a2de5 100644 --- a/man/ion3.cs.in +++ b/man/ion3.cs.in @@ -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/ diff --git a/man/ion3.fi.in b/man/ion3.fi.in index 896a4d5..b769d97 100644 --- a/man/ion3.fi.in +++ b/man/ion3.fi.in @@ -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/ diff --git a/man/ion3.in b/man/ion3.in index 304498d..6626f7a 100644 --- a/man/ion3.in +++ b/man/ion3.in @@ -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/ diff --git a/mod_query/listing.c b/mod_query/listing.c index fbac450..598e656 100644 --- a/mod_query/listing.c +++ b/mod_query/listing.c @@ -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(instrs); @@ -513,7 +528,7 @@ bool listing_select(WListing *l, int i) while(irowfirstitem), &(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; } diff --git a/mod_query/listing.h b/mod_query/listing.h index c8a669f..b8eb288 100644 --- a/mod_query/listing.h +++ b/mod_query/listing.h @@ -12,6 +12,7 @@ #include #include #include +#include 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); diff --git a/mod_query/wedln.c b/mod_query/wedln.c index da29aa9..0567c14 100644 --- a/mod_query/wedln.c +++ b/mod_query/wedln.c @@ -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], diff --git a/mod_sp/main.c b/mod_sp/main.c index e30d8c8..b187e99 100644 --- a/mod_sp/main.c +++ b/mod_sp/main.c @@ -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 diff --git a/mod_statusbar/ion-statusd/ion-statusd.c b/mod_statusbar/ion-statusd/ion-statusd.c index d3c2102..c44aca3 100644 --- a/mod_statusbar/ion-statusd/ion-statusd.c +++ b/mod_statusbar/ion-statusd/ion-statusd.c @@ -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; +} + diff --git a/mod_statusbar/ion-statusd/statusd_load.lua b/mod_statusbar/ion-statusd/statusd_load.lua index cd62178..88162af 100644 --- a/mod_statusbar/ion-statusd/statusd_load.lua +++ b/mod_statusbar/ion-statusd/statusd_load.lua @@ -18,50 +18,16 @@ 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() diff --git a/mod_statusbar/main.c b/mod_statusbar/main.c index b6a0e73..2e84bf3 100644 --- a/mod_statusbar/main.c +++ b/mod_statusbar/main.c @@ -16,15 +16,17 @@ #include #include #include +#include #include #include #include +#include #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; } diff --git a/mod_statusbar/mod_statusbar.lua b/mod_statusbar/mod_statusbar.lua index 81db1a4..1eec051 100644 --- a/mod_statusbar/mod_statusbar.lua +++ b/mod_statusbar/mod_statusbar.lua @@ -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 diff --git a/mod_tiling/split.c b/mod_tiling/split.c index d05cc58..568a2d1 100644 --- a/mod_tiling/split.c +++ b/mod_tiling/split.c @@ -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(); diff --git a/mod_tiling/tiling.c b/mod_tiling/tiling.c index 6fec372..877a8a8 100644 --- a/mod_tiling/tiling.c +++ b/mod_tiling/tiling.c @@ -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); } diff --git a/po/Makefile b/po/Makefile index 2db7db1..30327ba 100644 --- a/po/Makefile +++ b/po/Makefile @@ -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 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: \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 "" +msgstr "" + +#: ../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" + diff --git a/system.mk b/system.mk index c6165a7..32db47c 100644 --- 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 diff --git a/utils/ion-completefile/Makefile b/utils/ion-completefile/Makefile index e974d11..659500f 100644 --- a/utils/ion-completefile/Makefile +++ b/utils/ion-completefile/Makefile @@ -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 diff --git a/utils/ion-completefile/ion-completefile.c b/utils/ion-completefile/ion-completefile.c index 6e68e0a..3ae3c68 100644 --- a/utils/ion-completefile/ion-completefile.c +++ b/utils/ion-completefile/ion-completefile.c @@ -54,6 +54,7 @@ #include #include +#include #include #include #include diff --git a/version.h b/version.h index d33136a..587f7f6 100644 --- 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"