Guestfish built-in commands auto-complete (RHBZ#501878).
authorRichard Jones <rjones@trick.home.annexia.org>
Wed, 27 May 2009 11:29:35 +0000 (12:29 +0100)
committerRichard Jones <rjones@trick.home.annexia.org>
Wed, 27 May 2009 11:29:35 +0000 (12:29 +0100)
fish/completion.c
fish/fish.h
src/generator.ml

index ec58296..305e810 100644 (file)
 #ifdef HAVE_LIBREADLINE
 
 static const char *const commands[] = {
+  BUILTIN_COMMANDS_FOR_COMPLETION,
+  "launch",
+  "run",
+  "kill-subprocess",
+  "add-drive",
   "add",
   "add-cdrom",
-  "add-drive",
-  "append",
-  "aug-close",
-  "aug-defnode",
-  "aug-defvar",
-  "aug-get",
-  "aug-init",
-  "aug-insert",
-  "aug-load",
-  "aug-ls",
-  "aug-match",
-  "aug-mv",
-  "aug-rm",
-  "aug-save",
-  "aug-set",
-  "autosync",
-  "blockdev-flushbufs",
-  "blockdev-getbsz",
-  "blockdev-getro",
-  "blockdev-getsize64",
-  "blockdev-getss",
-  "blockdev-getsz",
-  "blockdev-rereadpt",
-  "blockdev-setbsz",
-  "blockdev-setro",
-  "blockdev-setrw",
-  "cat",
   "cdrom",
-  "checksum",
-  "chmod",
-  "chown",
-  "command",
-  "command-lines",
   "config",
-  "cp",
-  "cp-a",
-  "debug",
-  "dmesg",
-  "download",
-  "drop-caches",
-  "e2fsck-f",
-  "equal",
-  "exists",
-  "file",
-  "find",
-  "fsck",
+  "set-qemu",
+  "qemu",
+  "get-qemu",
+  "set-path",
+  "path",
+  "get-path",
+  "set-append",
+  "append",
   "get-append",
+  "set-autosync",
+  "autosync",
   "get-autosync",
-  "get-e2label",
-  "get-e2uuid",
-  "get-path",
-  "get-qemu",
-  "get-state",
+  "set-verbose",
+  "verbose",
   "get-verbose",
-  "grub-install",
-  "hexdump",
-  "is-busy",
+  "is-ready",
   "is-config",
-  "is-dir",
-  "is-file",
   "is-launching",
-  "is-ready",
-  "kill-subprocess",
-  "launch",
-  "list-devices",
-  "list-partitions",
+  "is-busy",
+  "get-state",
+  "mount",
+  "sync",
+  "touch",
+  "cat",
   "ll",
   "ls",
-  "lstat",
-  "lvcreate",
-  "lvm-remove-all",
-  "lvremove",
-  "lvresize",
-  "lvs",
-  "lvs-full",
-  "mkdir",
-  "mkdir-p",
-  "mkfs",
-  "mount",
-  "mount-options",
-  "mount-ro",
-  "mount-vfs",
-  "mounts",
-  "mv",
-  "path",
-  "ping-daemon",
-  "pvcreate",
-  "pvremove",
-  "pvresize",
+  "list-devices",
+  "list-partitions",
   "pvs",
+  "vgs",
+  "lvs",
   "pvs-full",
-  "qemu",
+  "vgs-full",
+  "lvs-full",
   "read-lines",
-  "resize2fs",
+  "aug-init",
+  "aug-close",
+  "aug-defvar",
+  "aug-defnode",
+  "aug-get",
+  "aug-set",
+  "aug-insert",
+  "aug-rm",
+  "aug-mv",
+  "aug-match",
+  "aug-save",
+  "aug-load",
+  "aug-ls",
   "rm",
-  "rm-rf",
   "rmdir",
-  "run",
-  "set-append",
-  "set-autosync",
-  "set-e2label",
-  "set-e2uuid",
-  "set-path",
-  "set-qemu",
-  "set-verbose",
+  "rm-rf",
+  "mkdir",
+  "mkdir-p",
+  "chmod",
+  "chown",
+  "exists",
+  "is-file",
+  "is-dir",
+  "pvcreate",
+  "vgcreate",
+  "lvcreate",
+  "mkfs",
   "sfdisk",
-  "sfdisk-N",
-  "sfdisk-disk-geometry",
-  "sfdisk-kernel-geometry",
-  "sfdisk-l",
+  "write-file",
+  "umount",
+  "unmount",
+  "mounts",
+  "umount-all",
+  "unmount-all",
+  "lvm-remove-all",
+  "file",
+  "command",
+  "command-lines",
   "stat",
+  "lstat",
   "statvfs",
-  "strings",
-  "strings-e",
-  "sync",
+  "tune2fs-l",
+  "blockdev-setro",
+  "blockdev-setrw",
+  "blockdev-getro",
+  "blockdev-getss",
+  "blockdev-getbsz",
+  "blockdev-setbsz",
+  "blockdev-getsz",
+  "blockdev-getsize64",
+  "blockdev-flushbufs",
+  "blockdev-rereadpt",
+  "upload",
+  "download",
+  "checksum",
   "tar-in",
   "tar-out",
   "tgz-in",
   "tgz-out",
-  "touch",
-  "tune2fs-l",
-  "umount",
-  "umount-all",
-  "unmount",
-  "unmount-all",
-  "upload",
-  "verbose",
-  "vg-activate",
-  "vg-activate-all",
-  "vgcreate",
+  "mount-ro",
+  "mount-options",
+  "mount-vfs",
+  "debug",
+  "lvremove",
   "vgremove",
-  "vgs",
-  "vgs-full",
-  "write-file",
+  "pvremove",
+  "set-e2label",
+  "get-e2label",
+  "set-e2uuid",
+  "get-e2uuid",
+  "fsck",
   "zero",
+  "grub-install",
+  "cp",
+  "cp-a",
+  "mv",
+  "drop-caches",
+  "dmesg",
+  "ping-daemon",
+  "equal",
+  "strings",
+  "strings-e",
+  "hexdump",
   "zerofree",
+  "pvresize",
+  "sfdisk-N",
+  "sfdisk-l",
+  "sfdisk-kernel-geometry",
+  "sfdisk-disk-geometry",
+  "vg-activate-all",
+  "vg-activate",
+  "lvresize",
+  "resize2fs",
+  "find",
+  "e2fsck-f",
   NULL
 };
 
index 91424e1..13a2e5c 100644 (file)
@@ -61,4 +61,14 @@ extern int do_echo (const char *cmd, int argc, char *argv[]);
 /* in edit.c */
 extern int do_edit (const char *cmd, int argc, char *argv[]);
 
+/* This should just list all the built-in commands so they can
+ * be added to the generated auto-completion code.
+ */
+#define BUILTIN_COMMANDS_FOR_COMPLETION \
+  "help", \
+  "quit", "exit", "q", \
+  "alloc", "allocate", \
+  "echo", \
+  "edit", "vi", "emacs"
+
 #endif /* FISH_H */
index 99913a3..9c210bc 100755 (executable)
@@ -4594,9 +4594,12 @@ and generate_fish_completion () =
 #ifdef HAVE_LIBREADLINE
 
 static const char *const commands[] = {
+  BUILTIN_COMMANDS_FOR_COMPLETION,
 ";
 
-  (* Get the commands and sort them, including the aliases. *)
+  (* Get the commands, including the aliases.  They don't need to be
+   * sorted - the generator() function just does a dumb linear search.
+   *)
   let commands =
     List.map (
       fun (name, _, _, flags, _, _, _) ->
@@ -4608,7 +4611,6 @@ static const char *const commands[] = {
        if name <> alias then [name2; alias] else [name2]
     ) all_functions in
   let commands = List.flatten commands in
-  let commands = List.sort compare commands in
 
   List.iter (pr "  \"%s\",\n") commands;