fish: Print extended help when the user types an unknown command first.
authorRichard Jones <rjones@redhat.com>
Tue, 6 Apr 2010 22:54:08 +0000 (23:54 +0100)
committerRichard Jones <rjones@redhat.com>
Wed, 7 Apr 2010 11:06:07 +0000 (12:06 +0100)
$ guestfish /tmp/disk.img
/tmp/disk.img: unknown command
Did you mean to open a disk image?  guestfish -a disk.img
For a list of commands:             guestfish -h
For complete documentation:         man guestfish

fish/fish.c
fish/fish.h
src/generator.ml

index 2022ee3..bd13a82 100644 (file)
@@ -73,6 +73,7 @@ int echo_commands = 0;
 int remote_control_listen = 0;
 int remote_control = 0;
 int exit_on_error = 1;
+int command_num = 0;
 
 int
 launch (guestfs_h *_g)
@@ -790,6 +791,9 @@ issue_command (const char *cmd, char *argv[], const char *pipecmd)
   int pid = 0;
   int i, r;
 
+  /* This counts the commands issued, starting at 1. */
+  command_num++;
+
   if (echo_commands) {
     printf ("%s", cmd);
     for (i = 0; argv[i] != NULL; ++i)
@@ -1073,6 +1077,21 @@ display_builtin_command (const char *cmd)
              cmd);
 }
 
+/* This is printed when the user types in an unknown command for the
+ * first command issued.  A common case is the user doing:
+ *   guestfish disk.img
+ * expecting guestfish to open 'disk.img' (in fact, this tried to
+ * run a command 'disk.img').
+ */
+void
+extended_help_message (void)
+{
+  fprintf (stderr,
+           _("Did you mean to open a disk image?  guestfish -a disk.img\n"
+             "For a list of commands:             guestfish -h\n"
+             "For complete documentation:         man guestfish\n"));
+}
+
 void
 free_strings (char **argv)
 {
index c4b1a45..06b8de5 100644 (file)
@@ -51,6 +51,7 @@
 extern guestfs_h *g;
 extern int quit;
 extern int verbose;
+extern int command_num;
 extern int issue_command (const char *cmd, char *argv[], const char *pipe);
 extern void pod2text (const char *name, const char *shortdesc, const char *body);
 extern void list_builtin_commands (void);
@@ -64,6 +65,7 @@ extern int is_true (const char *str);
 extern char **parse_string_list (const char *str);
 extern int xwrite (int fd, const void *buf, size_t len);
 extern char *resolve_win_path (const char *path);
+extern void extended_help_message (void);
 
 /* in cmds.c (auto-generated) */
 extern void list_commands (void);
index f206be1..416a66f 100755 (executable)
@@ -7403,6 +7403,8 @@ and generate_fish_cmds () =
   ) all_functions;
   pr "    {\n";
   pr "      fprintf (stderr, _(\"%%s: unknown command\\n\"), cmd);\n";
+  pr "      if (command_num == 1)\n";
+  pr "        extended_help_message ();\n";
   pr "      return -1;\n";
   pr "    }\n";
   pr "  return 0;\n";