* popt library. It supports short and long commandline options, as shown in the
* following example:
*
- *
* <literal>testtreemodel -r 1 --max-size 20 --rand --display=:1.0 -vb -- file1 file2</literal>
*
- *
* The example demonstrates a number of features of the GOption commandline parser
- * <itemizedlist>
+ * <itemizedlist><listitem><para>
* Options can be single letters, prefixed by a single dash. Multiple
* short options can be grouped behind a single dash.
- * </para></listitem>
+ * </para></listitem><listitem><para>
* Long options are prefixed by two consecutive dashes.
- * </para></listitem>
+ * </para></listitem><listitem><para>
* Options can have an extra argument, which can be a number, a string or a
* filename. For long options, the extra argument can be appended with an
* equals sign after the option name.
- * </para></listitem>
+ * </para></listitem><listitem><para>
* Non-option arguments are returned to the application as rest arguments.
- * </para></listitem>
+ * </para></listitem><listitem><para>
* An argument consisting solely of two dashes turns off further parsing,
* any remaining arguments (even those starting with a dash) are returned
* to the application as rest arguments.
- * </para></listitem>
- * </itemizedlist>
- *
+ * </para></listitem></itemizedlist>
*
* Another important feature of GOption is that it can automatically generate
* nicely formatted help output. Unless it is explicitly turned off with
* (where <replaceable>groupname</replaceable> is the name of a #GOptionGroup)
* and write a text similar to the one shown in the following example to stdout.
*
- *
* <informalexample><screen>
* Usage:
* testtreemodel [OPTION...] - test tree model performance
- *
+ *
* Help Options:
- * -?, --help Show help options
+ * -h, --help Show help options
* --help-all Show all help options
* --help-gtk Show GTK+ Options
- *
+ *
* Application Options:
* -r, --repeats=N Average over N repetitions
* -m, --max-size=M Test up to 2^M items
* to let applications collect option groups from the libraries it uses,
* add them to their #GOptionContext, and parse all options by a single call
* to g_option_context_parse(). See gtk_get_option_group() for an example.
- *
- *
+ *
* If an option is declared to be of type string or filename, GOption takes
* care of converting it to the right encoding; strings are returned in UTF-8,
* filenames are returned in the GLib filename encoding. Note that this only
* works if setlocale() has been called before g_option_context_parse().
*
- *
* Here is a complete example of setting up GOption to parse the example
* commandline above and produce the example help output.
*
#include "glibintl.h"
#include "gprintf.h"
-#include "galias.h"
#include <string.h>
#include <stdlib.h>
* Frees context and all the groups which have been
* added to it.
*
+ * Please note that parsed arguments need to be freed separately (see
+ * #GOptionEntry).
+ *
* Since: 2.6
*/
void g_option_context_free (GOptionContext *context)
*
* Enables or disables automatic generation of <option>--help</option>
* output. By default, g_option_context_parse() recognizes
- * <option>--help</option>, <option>-?</option>, <option>--help-all</option>
+ * <option>--help</option>, <option>-h</option>,
+ * <option>-?</option>, <option>--help-all</option>
* and <option>--help-</option><replaceable>groupname</replaceable> and creates
* suitable output to stdout.
*
return FALSE;
}
+static gboolean
+context_has_h_entry (GOptionContext *context)
+{
+ gsize i;
+ GList *list;
+
+ if (context->main_group)
+ {
+ for (i = 0; i < context->main_group->n_entries; i++)
+ {
+ if (context->main_group->entries[i].short_name == 'h')
+ return TRUE;
+ }
+ }
+
+ for (list = context->groups; list != NULL; list = g_list_next (list))
+ {
+ GOptionGroup *group;
+
+ group = (GOptionGroup*)list->data;
+ for (i = 0; i < group->n_entries; i++)
+ {
+ if (group->entries[i].short_name == 'h')
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
/**
* g_option_context_get_help:
* @context: a #GOptionContext
gboolean seen[256];
const gchar *rest_description;
GString *string;
+ guchar token;
string = g_string_sized_new (1024);
if (!group)
{
list = context->groups;
-
+
+ token = context_has_h_entry (context) ? '?' : 'h';
+
g_string_append_printf (string, "%s\n -%c, --%-*s %s\n",
- _("Help Options:"), '?', max_length - 4, "help",
+ _("Help Options:"), token, max_length - 4, "help",
_("Show help options"));
/* We only want --help-all when there are groups */
{ /* short option */
gint new_i = i, arg_length;
gboolean *nulled_out = NULL;
+ gboolean has_h_entry = context_has_h_entry (context);
arg = (*argv)[i] + 1;
arg_length = strlen (arg);
nulled_out = g_newa (gboolean, arg_length);
memset (nulled_out, 0, arg_length * sizeof (gboolean));
for (j = 0; j < arg_length; j++)
{
- if (context->help_enabled && arg[j] == '?')
- print_help (context, TRUE, NULL);
- parsed = FALSE;
+ if (context->help_enabled && (arg[j] == '?' ||
+ (arg[j] == 'h' && !has_h_entry)))
+ print_help (context, TRUE, NULL);
+ parsed = FALSE;
if (context->main_group &&
!parse_short_option (context, context->main_group,
i, &new_i, arg[j],
return context->description;
}
-
-
-#define __G_OPTION_C__
-#include "galiasdef.c"