So, a small recap. What help page is the right one for gnunet-search?

*Option 1: The current version with only the header reduced:*

gnunet-search [OPTIONS] KEYWORD1 KEYWORD2 ...
Search for files that have been published on GNUnet

Arguments mandatory for long options are also mandatory for short options.
  -a, --anonymity=LEVEL      set the desired LEVEL of receiver-anonymity
                               (default: 1)
  -b, --bookmark-only        do not search, print only the URI that points to
                               this search
  -c, --config=FILENAME      use configuration file FILENAME
  -F, --dir-printf=FORMAT    write search results for directories according to
                               FORMAT; the format specifiers supported here
                               are identical to those supported in the
                               --printf argument (please refer to it for more
                               information); if missing, --dir-printf defaults
                               to --printf; if --printf is missing too
                               --dir-printf defaults to `#%n:\ngnunet-download
                               -o "%f" -R %u\n\n`
  -f, --printf=FORMAT        write search results according to FORMAT, where
                               %a is the complete list of all the printable
                               metadata available (each member will be
                               displayed according to the --iter-printf
                               argument) - use %j for printing only one field
                               - %f is the file's name, %l is the file name's
                               length, %m is the file's mime type, %n is the
                               search result number, %s is the file's size in
                               bytes and %u is the file's URI; the %a and %j
                               specifiers optionally support metatype
                               filtering via hash sign (e.g. `%5#j` prints a
                               book title, if present - see libextractor's
                               metatypes for the complete list of numerical
                               identifiers); if missing, --printf defaults to
                               `#%n:\ngnunet-download -o "%f" %u\n\n`
  -h, --help                 print this help
  -i, --iter-printf=FORMAT   when the %a or %j format specifiers appear in
                               --printf or --dir-printf, list each metadata
                               property according to FORMAT, where %p is the
                               property's content, %l is the content's length
                               in bytes, %t is the property type, %i is the
                               property type's unique identifier, %n is the
                               property number and %w is the name of the
                               plugin that provided the information; if
                               missing, --iter-printf defaults to `  %t: %p\n`
  -L, --log=LOGLEVEL         configure logging to use LOGLEVEL
  -l, --logfile=FILENAME     configure logging to write logs to FILENAME
  -N, --results=VALUE        automatically terminate search after VALUE
                               results are found
  -n, --no-network           only search the local peer (no P2P network
                               search)
  -o, --output=FILENAME      create a GNUnet directory with search results at
                               FILENAME (e.g. `gnunet-search
                               --output=commons.gnd commons`)
  -s, --silent               silent mode (requires the --output argument)
  -t, --timeout=DELAY        automatically terminate search after DELAY; the
                               value given must be a number followed by a
                               space and a time unit, for example "500 ms";
                               without a unit it defaults to microseconds -
                               1000000 = 1 second; if 0 or omitted it means to
                               wait for CTRL-C
  -V, --verbose              be verbose (append "%a\n" to the default --printf
                               and --dir-printf arguments - ignored when these
                               are provided by the user)
  -v, --version              print the version number

Report bugs to gnunet-developers@gnu.org.
Home page: http://www.gnu.org/s/gnunet/
General help using GNU software: http://www.gnu.org/gethelp/

*Option 2: The version further reduced after Alessio's comments*

gnunet-search [OPTIONS] KEYWORD1 KEYWORD2 ...
Search for files that have been published on GNUnet

Arguments mandatory for long options are also mandatory for short options.
  -a, --anonymity=LEVEL      set the desired LEVEL of receiver-anonymity
                               (default: 1)
  -b, --bookmark-only        do not search, print only the URI that points to
                               this search
  -c, --config=FILENAME      use configuration file FILENAME
  -F, --dir-printf=FORMAT    write search results for directories according to
                               FORMAT; accepted placeholders are: %a, %f, %j,
                               %l, %m, %n, %s; defaults to the value of
                               --printf when omitted; if --printf is omitted
                               too defaults to `#%n:\ngnunet-download -o "%f"
                               -R %u\n\n`
  -f, --printf=FORMAT        write search results according to FORMAT;
                               accepted placeholders are: %a, %f, %j, %l, %m,
                               %n, %s; defaults to `#%n:\ngnunet-download -o
                               "%f" %u\n\n` when omitted
  -h, --help                 print this help
  -i, --iter-printf=FORMAT   when the %a or %j format specifiers appear in
                               --printf or --dir-printf, list each metadata
                               property according to FORMAT; accepted
                               placeholders are: %i, %l, %n, %p, %t, %w;
                               defaults to `  %t: %p\n` when omitted
  -L, --log=LOGLEVEL         configure logging to use LOGLEVEL
  -l, --logfile=FILENAME     configure logging to write logs to FILENAME
  -N, --results=VALUE        automatically terminate search after VALUE
                               results are found
  -n, --no-network           only search the local peer (no P2P network
                               search)
  -o, --output=FILENAME      create a GNUnet directory with search results at
                               FILENAME (e.g. `gnunet-search
                               --output=commons.gnd commons`)
  -s, --silent               silent mode (requires the --output argument)
  -t, --timeout=DELAY        automatically terminate search after DELAY; the
                               value given must be a number followed by a
                               space and a time unit, for example "500 ms";
                               without a unit it defaults to microseconds -
                               1000000 = 1 second; if 0 or omitted it means to
                               wait for CTRL-C
  -V, --verbose              be verbose (append "%a\n" to the default --printf
                               and --dir-printf arguments - ignored when these
                               are provided by the user)
  -v, --version              print the version number

Report bugs to gnunet-developers@gnu.org.
Home page: http://www.gnu.org/s/gnunet/
General help using GNU software: http://www.gnu.org/gethelp/

*Option 3: Any other new proposal?*

...

--madmurphy

On Sat, Feb 12, 2022 at 1:58 AM madmurphy <madmurphy...@gmail.com> wrote:

> Hi Alessio,
>
> the line saying "The main reason is that it's so long to be basically
> unreadable." wasn't related only to the program's description, but to the
> whole output, sorry for the confusion.
>
> [...]
>
> Writing something like:
>
> "Format output according to FORMAT.
> Accepted placeholders: %j %l %f %u %n
> Defaults to the value of --printf when omitted"
>
> is perfectly fine.
>
> We can do that (see file attached), but the output would not become
> terribly smaller, and the reason is that the program accepts many
> arguments. The modified help page would look like this:
>
> $ gnunet-search --help
>
> gnunet-search [OPTIONS] KEYWORD1 KEYWORD2 ...
> Search for files that have been published on GNUnet
>
> Arguments mandatory for long options are also mandatory for short options.
>   -a, --anonymity=LEVEL      set the desired LEVEL of receiver-anonymity
>                                (default: 1)
>   -b, --bookmark-only        do not search, print only the URI that points to
>                                this search
>   -c, --config=FILENAME      use configuration file FILENAME
>   -F, --dir-printf=FORMAT    write search results for directories according to
>                                FORMAT; accepted placeholders are: %a, %f, %j,
>                                %l, %m, %n, %s; defaults to the value of
>                                --printf when omitted; if --printf is omitted
>                                too defaults to `#%n:\ngnunet-download -o "%f"
>                                -R %u\n\n`
>   -f, --printf=FORMAT        write search results according to FORMAT;
>                                accepted placeholders are: %a, %f, %j, %l, %m,
>                                %n, %s; defaults to `#%n:\ngnunet-download -o
>                                "%f" %u\n\n` when omitted
>   -h, --help                 print this help
>   -i, --iter-printf=FORMAT   when the %a or %j format specifiers appear in
>                                --printf or --dir-printf, list each metadata
>                                property according to FORMAT; accepted
>                                placeholders are: %i, %l, %n, %p, %t, %w;
>                                defaults to `  %t: %p\n` when omitted
>   -L, --log=LOGLEVEL         configure logging to use LOGLEVEL
>   -l, --logfile=FILENAME     configure logging to write logs to FILENAME
>   -N, --results=VALUE        automatically terminate search after VALUE
>                                results are found
>   -n, --no-network           only search the local peer (no P2P network
>                                search)
>   -o, --output=FILENAME      create a GNUnet directory with search results at
>                                FILENAME (e.g. `gnunet-search
>                                --output=commons.gnd commons`)
>   -s, --silent               silent mode (requires the --output argument)
>   -t, --timeout=DELAY        automatically terminate search after DELAY; the
>                                value given must be a number followed by a
>                                space and a time unit, for example "500 ms";
>                                without a unit it defaults to microseconds -
>                                1000000 = 1 second; if 0 or omitted it means to
>                                wait for CTRL-C
>   -V, --verbose              be verbose (append "%a\n" to the default --printf
>                                and --dir-printf arguments - ignored when these
>                                are provided by the user)
>   -v, --version              print the version number
>
> Report bugs to gnunet-developers@gnu.org.
> Home page: http://www.gnu.org/s/gnunet/
> General help using GNU software: http://www.gnu.org/gethelp/
>
> As for the man page, I can think of a few example to add. But wouldn't
> putting all the format specifiers together create confusion, since
> --printf and --iter-printf use different format specifiers? I would use a
> unified section for the examples, but I would leave the specifier lists
> where they are.
>
> --madmurphy
>
> On Fri, Feb 11, 2022 at 11:56 PM Alessio Vanni <vanni...@firemail.cc>
> wrote:
>
>> Before replying on your points, a correction: the line saying "The main
>> reason is that it's so long to be basically unreadable." wasn't related
>> only to the program's description, but to the whole output, sorry for
>> the confusion.
>>
>> As for the rest:
>>
>> > Man pages are not always installed by people, and a help page should
>> > be able to explain the bare minimum.
>>
>> In my opinion, if people don't install man pages and then need them,
>> it's their own fault if then they don't know what to do.  Of course, if
>> the OS doesn't come shipped with them it's not the user's fault, but it
>> still doesn't mean the description of the flag has to be a full paragraph.
>> I believe simply listing the accepted formats is enough, e.g.
>>
>> "Format output according to FORMAT.
>> Accepted placeholders: %j %l %f %u %n"
>>
>> That way people that know what they mean can see the full range of
>> accepted values — for example to make sure they are not adding useless
>> modifiers — without having to scan a long piece of text, while people
>> that don't know, either read the documentation somehow or experiment
>> using the listed letters.
>>
>> > However, since when not specified --dir-printf defaults to --printf, a
>> > mention of --printf will always be there in a way or another.
>>
>> Of course, I was mostly referring to the fact that explaining the
>> purpose of a flag _only_ as "works like <another flag>" without
>> providing any other explanation doesn't really make for a great
>> experience.
>>
>> Writing something like:
>>
>> "Format output according to FORMAT.
>> Accepted placeholders: %j %l %f %u %n
>> Defaults to the value of --printf when omitted"
>>
>> is perfectly fine.
>>
>> Regarding the man page, I believe you should add a dedicated section
>> before "EXAMPLES" where you describe all the formatting modifiers.
>>
>> If you put them right under the flag, not only you duplicate shared
>> values, but it becomes hard to check the available flags since the page
>> becomes unnecessarily long.
>>
>> Of course, there are plenty of other programs out there with a lot of
>> flags and with very long descriptions, so scrolling for screenfuls
>> becomes the norm, but most of the time it's the actual behaviour that
>> needs to be explained at length. In this case, the flags are very simple
>> in what they do, so I believe having formatting rules be in a dedicated
>> section is the best course of action.
>>
>> These are my opinions as someone who can never remember the accepted
>> flags or how they work, and thus need to run programs with `--help' or
>> open up the manual before actually running the program.
>>
>> Thanks,
>> A.V.
>>
>>

Reply via email to