From f0d3241ecba2a749021f36ed60d5a386823c0dd9 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 13 Apr 2017 19:27:46 +0200 Subject: [PATCH] Ticket #3805: fix --help option to show correct syntax for editor, viewer and mcdiff Before the patch: --help shows the same text for all tools, only "mc" is replaced by tool name. For example, "mcedit --help" says: Usage: mcedit [OPTION...] [+number] [this_dir] [other_panel_dir] +number - Set initial line number for the internal editor which is wrong: mcedit does not take [this_dir] [other_panel_dir] syntax, that's mc syntax. After the patch, each tool has its own syntax string shown. "Usage:" message for each tool is as follows now: mc [OPTION...] [this_dir] [other_panel_dir] mcedit [OPTION...] [+lineno] file1[:lineno] [file2[:lineno]...] mcview [OPTION...] file mcdiff [OPTION...] file1 file2 Signed-off-by: Denys Vlasenko Signed-off-by: Andrew Borodin --- src/args.c | 74 +++++++++++++++++++++++++++++++++++------------------- src/args.h | 1 + src/main.c | 2 ++ 3 files changed, 51 insertions(+), 26 deletions(-) diff --git a/src/args.c b/src/args.c index 5ee547071..7e6c25bb8 100644 --- a/src/args.c +++ b/src/args.c @@ -388,12 +388,28 @@ mc_args_new_color_group (void) static gchar * mc_args_add_usage_info (void) { - mc_args__loc__usage_string = g_strdup_printf ("[%s] %s\n %s - %s\n", - _("+number"), - _("[this_dir] [other_panel_dir]"), - _("+number"), - _ - ("Set initial line number for the internal editor")); + gchar *s; + + switch (mc_global.mc_run_mode) + { + case MC_RUN_EDITOR: + s = g_strdup_printf ("%s\n", _("[+lineno] file1[:lineno] [file2[:lineno]...]")); + break; + case MC_RUN_VIEWER: + s = g_strdup_printf ("%s\n", _("file")); + break; +#ifdef USE_DIFF_VIEW + case MC_RUN_DIFFVIEWER: + s = g_strdup_printf ("%s\n", _("file1 file2")); + break; +#endif /* USE_DIFF_VIEW */ + case MC_RUN_FULL: + default: + s = g_strdup_printf ("%s\n", _("[this_dir] [other_panel_dir]")); + } + + mc_args__loc__usage_string = s; + return mc_args__loc__usage_string; } @@ -613,6 +629,32 @@ parse_mcedit_arguments (int argc, char **argv) /*** public functions ****************************************************************************/ /* --------------------------------------------------------------------------------------------- */ +void +mc_setup_run_mode (char **argv) +{ + const char *base; + + base = x_basename (argv[0]); + + if (strncmp (base, "mce", 3) == 0 || strcmp (base, "vi") == 0) + { + /* mce* or vi is link to mc */ + mc_global.mc_run_mode = MC_RUN_EDITOR; + } + else if (strncmp (base, "mcv", 3) == 0 || strcmp (base, "view") == 0) + { + /* mcv* or view is link to mc */ + mc_global.mc_run_mode = MC_RUN_VIEWER; + } +#ifdef USE_DIFF_VIEW + else if (strncmp (base, "mcd", 3) == 0 || strcmp (base, "diff") == 0) + { + /* mcd* or diff is link to mc */ + mc_global.mc_run_mode = MC_RUN_DIFFVIEWER; + } +#endif /* USE_DIFF_VIEW */ +} + gboolean mc_args_parse (int *argc, char ***argv, const char *translation_domain, GError ** mcerror) { @@ -730,7 +772,6 @@ mc_args_show_info (void) gboolean mc_setup_by_args (int argc, char **argv, GError ** mcerror) { - const char *base; char *tmp; mc_return_val_if_error (mcerror, FALSE); @@ -764,27 +805,8 @@ mc_setup_by_args (int argc, char **argv, GError ** mcerror) (void) vpath; } - base = x_basename (argv[0]); tmp = (argc > 0) ? argv[1] : NULL; - if (strncmp (base, "mce", 3) == 0 || strcmp (base, "vi") == 0) - { - /* mce* or vi is link to mc */ - mc_global.mc_run_mode = MC_RUN_EDITOR; - } - else if (strncmp (base, "mcv", 3) == 0 || strcmp (base, "view") == 0) - { - /* mcv* or view is link to mc */ - mc_global.mc_run_mode = MC_RUN_VIEWER; - } -#ifdef USE_DIFF_VIEW - else if (strncmp (base, "mcd", 3) == 0 || strcmp (base, "diff") == 0) - { - /* mcd* or diff is link to mc */ - mc_global.mc_run_mode = MC_RUN_DIFFVIEWER; - } -#endif /* USE_DIFF_VIEW */ - switch (mc_global.mc_run_mode) { case MC_RUN_EDITOR: diff --git a/src/args.h b/src/args.h index 53ff9eadb..616864d00 100644 --- a/src/args.h +++ b/src/args.h @@ -46,6 +46,7 @@ extern char *mc_run_param1; /*** declarations of public functions ************************************************************/ +void mc_setup_run_mode (char **argv); gboolean mc_args_parse (int *argc, char ***argv, const char *translation_domain, GError ** mcerror); gboolean mc_args_show_info (void); gboolean mc_setup_by_args (int argc, char **argv, GError ** mcerror); diff --git a/src/main.c b/src/main.c index bdc40bae1..001e67dd3 100644 --- a/src/main.c +++ b/src/main.c @@ -234,6 +234,8 @@ main (int argc, char *argv[]) /* do this before args parsing */ str_init_strings (NULL); + mc_setup_run_mode (argv); /* are we mc? editor? viewer? etc... */ + if (!mc_args_parse (&argc, &argv, "mc", &mcerror)) { startup_exit_falure: