X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=fish%2Fcompletion.c;h=92843e562acd29f72f05708b993df3c52353cab2;hp=e1603f1bd6db0df854394b6adfc80794906665e1;hb=5e332cc6c06532191f793a6789bafe818f726258;hpb=43db06ea892cc157324a6b837ca430607441c509 diff --git a/fish/completion.c b/fish/completion.c index e1603f1..92843e5 100644 --- a/fish/completion.c +++ b/fish/completion.c @@ -33,106 +33,156 @@ #ifdef HAVE_LIBREADLINE -static const char *commands[] = { +static const char *const commands[] = { + BUILTIN_COMMANDS_FOR_COMPLETION, + "launch", + "run", + "kill-subprocess", + "add-drive", "add", "add-cdrom", - "add-drive", - "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", + "add-drive-ro", + "add-ro", "config", - "download", - "exists", - "file", - "get-autosync", - "get-path", + "set-qemu", + "qemu", "get-qemu", - "get-state", + "set-path", + "path", + "get-path", + "set-append", + "append", + "get-append", + "set-autosync", + "autosync", + "get-autosync", + "set-verbose", + "verbose", "get-verbose", - "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", - "lvs", - "lvs-full", - "mkdir", - "mkdir-p", - "mkfs", - "mount", - "mounts", - "path", - "pvcreate", + "list-devices", + "list-partitions", "pvs", + "vgs", + "lvs", "pvs-full", - "qemu", + "vgs-full", + "lvs-full", "read-lines", + "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-autosync", - "set-path", - "set-qemu", - "set-verbose", + "rm-rf", + "mkdir", + "mkdir-p", + "chmod", + "chown", + "exists", + "is-file", + "is-dir", + "pvcreate", + "vgcreate", + "lvcreate", + "mkfs", "sfdisk", + "write-file", + "umount", + "unmount", + "mounts", + "umount-all", + "unmount-all", + "lvm-remove-all", + "file", + "command", + "command-lines", "stat", + "lstat", "statvfs", - "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", - "vgcreate", - "vgs", - "vgs-full", - "write-file", + "mount-ro", + "mount-options", + "mount-vfs", + "debug", + "lvremove", + "vgremove", + "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", + "sleep", + "ntfs-3g-probe", + "sh", + "sh-lines", + "glob-expand", + "scrub-device", + "scrub-file", + "scrub-freespace", NULL }; @@ -147,6 +197,8 @@ generator (const char *text, int state) len = strlen (text); } + rl_attempted_completion_over = 1; + while ((name = commands[index]) != NULL) { index++; if (strncasecmp (name, text, len) == 0) @@ -163,8 +215,12 @@ char **do_completion (const char *text, int start, int end) char **matches = NULL; #ifdef HAVE_LIBREADLINE + rl_completion_append_character = ' '; + if (start == 0) matches = rl_completion_matches (text, generator); + else if (complete_dest_paths) + matches = rl_completion_matches (text, complete_dest_paths_generator); #endif return matches;