|
From: | madmurphy |
Subject: | Re: printf-like output for gnunet-search |
Date: | Tue, 8 Feb 2022 13:39:54 +0000 |
Last proposal about gnunet-search
, then I will stop because the program is becoming hardcore: add a %[NUM]#[SPEC]
syntax for the metadata specifiers (now they are two, %a
and %j
) in order to extract only specific metatypes. For example, -f '%f%49#j\n' -i ' (%p)'
will print the file's keywords in brackets, if found. Something like (emphasis mine)
$ gnunet-search commons -f '%f%49#j\n' -i ' (%p)' 2019 Helfrich; Bollier_ Frei, fair und lebendig - Die Macht der Commons.pdf Rose, Carol (1986)_ The Comedy of the Commons_ Commerce, Custom, and inherently Public Property.pdf De Angelis (2017)_ Omnia Sunt Communia. On the Commons and the Transformation to Postcapitalism.pdf Ostrom, Elinor (1990)_ Governing the Commons. The evolution of institutions for collective action.pdf Gemeingueter_Report_Commons.pdf File with keywords.pdf (some keyword, some other keyword, etc.) Rose, Carol (1986)_ The Comedy of the Commons_ Commerce, Custom, and inherently Public Property.pdf Klick, Jonna (2021)_ Massimo de Angelis - Omnia Sunt Communia - Eine Grundlegung der Commons - Rezension.pdf Helfrich, Silke_ Logik der Commons und des Marktes.png Hardin, Garett (1968)_ Tragedy of the Commons.pdf Another file with keywords.pdf (some keyword, some other keyword, etc.) Liotard (2017)_ Fablab - a new space for commons based peer production.pdf Neustart Schweiz (2016)_ Nach Hause kommen. Nachbarschaften als Commons.pdf
The number 49
is the EXTRACTOR_METATYPE_KEYWORDS
identifier from extractor.h
(not the search keywords). Once again, the new help page should explain it:
$ gnunet-search --help gnunet-search [OPTIONS] KEYWORD1 KEYWORD2 ... Search for files that have been published on GNUnet Keywords should start with a plus sign to indicate that they are required - e.g. `gnunet-search commons gpl` searches for files that match either "commons" or "gpl", whereas `gnunet-search +commons +gpl` searches for files that match both "commons" and "gpl". Arguments mandatory for long options are also mandatory for short options. -a, --anonymity=LEVEL set the desired LEVEL of receiver-anonymity -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 the --printf argument (please see there for more information); if missing, --dir-printf defaults to --printf; if the latter 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 --prop-printf argument) - use %j for printing one field only - %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, --prop-printf=FORMAT when the %a format specifier appears 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, --prop-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 (in number of microseconds); if 0 or omitted it means to wait for CTRL-C -V, --verbose be verbose -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/
What
do you think? If it sounds already too hardcore I will go back to the
previous version. But then we will not have any means to print only
specific metatypes…
Please find the new proposal attached.
--madmurphy
Thank you a lot, Carlo.
Yes,--format
(--dir-format
) was the original name. Then I saw that the tendency favoured--printf
(--dir-printf
) more and I changed it – but I have intentionally left-f
(-F
) for the short name(s). The new name is actually inspired to the-printf
argument offind
(%s
and%f
have even identical meaning in bothfind
andgnunet-search
), but if you guys think that--format
(--dir-format
) is better, then I will change it back.
In the meanwhile, silly me, I had forgotten to actually implement the%s
specifier for the file size. I did that now (patch attached). I also added a--silent
argument for when people only want to create a GNUnet directory and don't care about the output printed on screen. And finally, I tried to expand the help page a bit. Here is the new text:$ gnunet-search --help gnunet-search [OPTIONS] KEYWORD 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 -c, --config=FILENAME use configuration file FILENAME -F, --dir-printf=FORMAT write search results for directories according to FORMAT, where %a is the complete list of all the printable metadata available (each member of which will be displayed according to the --prop-printf argument), %f is the directory's name, %l is the directory name's length, %m is the directory's mime type (always equal to `application/gnunet-directory`), %n is the search result number, %s is the directory's size in bytes and %u is the directory's URI; if missing, --dir-printf defaults to the --printf argument; if the latter 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 of which will be displayed according to the --prop-printf argument), %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; if missing, --printf defaults to `#%n:\ngnunet-download -o "%f" %u\n\n` -h, --help print this help -i, --prop-printf=FORMAT when the %a format specifier appears 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, --prop-printf defaults to `\t%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 (in number of microseconds); if 0 or omitted il means to wait for CTRL-C -V, --verbose be verbose -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/Despite the multiple possibilities that the new features offer, I think the most needed one was the simplest one: that of simply launching
gnunet-search -f '%f\n' commonsand print a simple naked list of the files that can be retrieved with the
commons
keyword, without any URI or distractions (if later I want to actually download something I will omit the--printf
argument, or use another format that contains the%u
specifier). But the possibilities are really many.
There is still room for additions, but there is also no hurry.
--madmurphyOn Mon, Feb 7, 2022 at 12:14 PM carlo von lynX <lynX@time.to.get.psyced.org> wrote:Thank you, madmurphy! I think several of the gnunet
CLI tools need improvements of this kind, actually.
I vaguely remember doing similar edits somewhere -
making outputs friendly to parse.
On Sat, Feb 05, 2022 at 08:09:02AM +0000, madmurphy wrote:
> 1. What do you think about the fact that I have named the new arguments
> --printf, --dir-printf and --prop-printf? Do you think that alternative
> names would be better?
Since %u %n etc now have a very different meaning from
what they mean in regular printf, I would rather just
call them --format, --dir-format and --prop-format.
> 5. Do you like the idea?
Yes.
> > -F, --dir-format=DIRFORMAT write search results for directories according to
> > -f, --format=FORMAT write search results according to FORMAT, where
Oh, you already had it that way.
gnunet-search.rev6.patch.zip
Description: Zip archive
[Prev in Thread] | Current Thread | [Next in Thread] |