On 02/08/2013 03:07 PM, Eric Blake wrote:
> On 02/08/2013 04:07 AM, Bernhard Voelker wrote:
>>
>>
>> On February 7, 2013 at 8:20 PM Benno Schulenberg <[email protected]> 
>> wrote:
>>> On Thu, Feb 7, 2013, at 0:12, Bernhard Voelker wrote:
>>>>   "), _("\
>>>>     -X, --xyz     some text\n\
>>>>   "), _("\
>>>>     -Y            another option with a longer\n\
>>>>                   description message\n\
>>>>   "), _("\
>>>
>>> Hmmm...  To me these intervening lines with '"), _("\' look
>>> distracting.
> 
> It's worth seeing how coreutils does this, for comparison:
> http://git.sv.gnu.org/cgit/coreutils.git/tree/src/ls.c#n4714

Guess who made the last change there ... ;-)

Kidding aside, another difference is that secondary lines of
a description are indented by 2 character. I added this to my
new patch.

>> Admitted, but the point was a nice alignment of the description
>> column for options with a wrapped line. That would be harder
>> with such an approach:
>>
>>>   HTL ("  -X, --xyz     some text\n\");
>>>   HTL ("  -Y            another option with a longer\n\
>>>                   description message\n\");
> 
> No, just use C string concatenation to get alignment:
> 
>    HTL ("  -X, --xyz     some text\n");
>    HTL ("  -Y            another option with a longer\n"
>         "                description message\n");

Yes thanks, I've done it in that way - well not exactly, as we
still need the _( ) around the texts to make them find their
way into the *.po files.

The only drawback is that the line length in the code is now
>80 although this doesn't seem to be a hard style limit in
findutils.

Attached is v2.

Have a nice day,
Berny
>From a2a0ba8c8397a2b54f4ebdfc2fbbe6f066add96a Mon Sep 17 00:00:00 2001
From: Bernhard Voelker <[email protected]>
Date: Fri, 8 Feb 2013 22:08:22 +0100
Subject: [PATCH] xargs: split usage text to help translators

Smaller chunks are easier to handle for translators, ideally
one msgid per option.  Separate them.

Clarify -l option: separate from -L to emphasize that MAX-LINES
is optional for the -l option.

* xargs/xargs.c (usage): Define HTL macro to print one help text
line (or entry).  Split the option descriptions up by using the
above macro.  Refine the messages to adapt to the common way:
change the start of each option's description to lower case,
do not use periods at the end, use semicolons where needed,
indent secondary lines.

Reported by Benno Schulenberg in
http://lists.gnu.org/archive/html/bug-findutils/2013-02/msg00017.html
---
 xargs/xargs.c |   85 +++++++++++++++++++++++++++++----------------------------
 1 files changed, 43 insertions(+), 42 deletions(-)

diff --git a/xargs/xargs.c b/xargs/xargs.c
index 5fd93cd..2b2ec54 100644
--- a/xargs/xargs.c
+++ b/xargs/xargs.c
@@ -1584,46 +1584,47 @@ parse_num (char *str, int option, long int min, long int max, int fatal)
 static void
 usage (FILE *stream)
 {
-  fprintf (stream, _("\
-Usage: %s [OPTION]... COMMAND INITIAL-ARGS...\n\
-Run COMMAND with arguments INITIAL-ARGS and more arguments read from input.\n"),
-	   program_name);
-  fprintf (stream, _("\n\
-Mandatory arguments to long options are mandatory for short options too.\n\
-Non-mandatory arguments are indicated by [square brackets]\n\
-  -0, --null                   Items are separated by a null, not whitespace.\n\
-                               Disables quote and backslash processing\n\
-  -a, --arg-file=FILE          Read arguments from FILE, not standard input\n\
-  -d, --delimiter=CHARACTER    Input items are separated by CHARACTER, not by\n\
-                               blank space. Disables quote and backslash\n\
-                               processing\n\
-  -E END                       If END occurs as a line of input, the rest of\n\
-                               the input is ignored.\n\
-  -e [END], --eof[=END]        Equivalent to -E END if END is specified.\n\
-                               Otherwise, there is no end-of-file string\n\
-  --help                       Print a summary of the options to xargs.\n\
-  -I R                         same as --replace=R (R must be specified)\n\
-  -i,--replace=[R]             Replace R in initial arguments with names\n\
-                               read from standard input. If R is\n\
-                               unspecified, assume {}\n\
-  -L,-l, --max-lines=MAX-LINES Use at most MAX-LINES nonblank input lines per\n\
-                               command line\n\
-  -l                           Use at most one nonblank input line per\n\
-                               command line\n\
-  -n, --max-args=MAX-ARGS      Use at most MAX-ARGS arguments per command\n\
-                               line\n\
-  -P, --max-procs=MAX-PROCS    Run up to max-procs processes at a time\n\
-  -p, --interactive            Prompt before running commands\n\
-  --process-slot-var=VAR       Set environment variable VAR in child\n\
-                               processes\n\
-  -r, --no-run-if-empty        If there are no arguments, run no command.\n\
-                               If this option is not given, COMMAND will be\n\
-                               run at least once.\n\
-  -s, --max-chars=MAX-CHARS    Limit commands to MAX-CHARS at most\n\
-  --show-limits                Show limits on command-line length.\n\
-  -t, --verbose                Print commands before executing them\n\
-  --version                    Print the version number\n\
-  -x, --exit                   Exit if the size (see -s) is exceeded\n\
-"));
-  fputs (_("\nReport bugs to <[email protected]>.\n"), stream);
+  fprintf (stream,
+           _("Usage: %s [OPTION]... COMMAND INITIAL-ARGS...\n"),
+           program_name);
+
+#define HTL(t) fputs (t, stream);
+
+  HTL (_("Run COMMAND with arguments INITIAL-ARGS and more arguments read from input.\n"
+         "\n"
+         "Mandatory arguments to long options are mandatory for short options too.\n"
+         "Non-mandatory arguments are indicated by [square brackets].\n"));
+  HTL (_("  -0, --null                   items are separated by a null, not whitespace;\n"
+         "                                 disables quote and backslash processing\n"));
+  HTL (_("  -a, --arg-file=FILE          read arguments from FILE, not standard input\n"));
+  HTL (_("  -d, --delimiter=CHARACTER    input items are separated by CHARACTER, not by\n"
+         "                                 blank space; disables quote and backslash\n"
+         "                                 processing\n"));
+  HTL (_("  -E END                       if END occurs as a line of input, the rest of\n"
+         "                                 the input is ignored\n"));
+  HTL (_("  -e [END], --eof[=END]        equivalent to -E END if END is specified;\n"
+         "                                 otherwise, there is no end-of-file string\n"));
+  HTL (_("      --help                   print a summary of the options to xargs\n"));
+  HTL (_("  -I R                         same as --replace=R (R must be specified)\n"));
+  HTL (_("  -i, --replace=[R]            replace R in initial arguments with names read\n"
+         "                                 from standard input; if R is unspecified,\n"
+         "                                 assume {}\n"));
+  HTL (_("  -L, --max-lines=MAX-LINES    use at most MAX-LINES nonblank input lines per\n"
+         "                                 command line\n"));
+  HTL (_("  -l [MAX-LINES]               similar to -L but defaults to at most one\n"
+         "                                 nonblank input line if MAX-LINES not specified\n"));
+  HTL (_("  -n, --max-args=MAX-ARGS      use at most MAX-ARGS arguments per command line\n"));
+  HTL (_("  -P, --max-procs=MAX-PROCS    run up to max-procs processes at a time\n"));
+  HTL (_("  -p, --interactive            prompt before running commands\n"));
+  HTL (_("      --process-slot-var=VAR   set environment variable VAR in child processes\n"));
+  HTL (_("  -r, --no-run-if-empty        if there are no arguments, run no command;\n"
+         "                                 if this option is not given, COMMAND will be\n"
+         "                                 run at least once\n"));
+  HTL (_("  -s, --max-chars=MAX-CHARS    limit commands to MAX-CHARS at most\n"));
+  HTL (_("      --show-limits            show limits on command-line length\n"));
+  HTL (_("  -t, --verbose                print commands before executing them\n"));
+  HTL (_("      --version                print the version number\n"));
+  HTL (_("  -x, --exit                   exit if the size (see -s) is exceeded\n"));
+  HTL (_("\n"
+         "Report bugs to <[email protected]>.\n"));
 }
-- 
1.7.7

Reply via email to