This patch set represents yet another attempt to improve the virsh autocompletion. When writing this patch, I tried to take into account the comments on the previous attempt at autocompletion by Tomas Meszaros. Specifically, it was reccomended that any completion use the existing methods that virsh has in place to parse the partial line being completed. When doing so, I found that I was duplicating a significant portion of the code in vshCommandParse. Since the comments on Tomas's code suggested refactoring common code into a separate function, I attempted to do so with vshCommandParse. One of the primary issues with simply just moving the parsing logic from vshCommandParse into a separate function was that vshCommandParse throws errors when it encounters unknown or invalid information. While this is the correct behavior for parsing a command to be executed, it is not appropriate for autocompletion. Essentially, the new function represents one iteration of the main loop from vshCommandParse. However, instead of constructing a parsed option or command object at the end, or returning errors, it returns a "state" value and sets pointers. Then, a calling function may choose to deal with the state values (like vshCommandParse) or ignore most of the state values (like the completion code, which ignores most state and errors, as it is just interested in which flags have already been used). This is perhaps the most "dangerous" and controversial part of the patch set, so I figured I'd get some feedback before progressing any further. The other significant changes in the patch set (besides richer completion support) are as follows: - completion no longer automatically falls back to readline's default filename completion. Instead, if filename completion is desired, an option may be explicitly marked as requiring filename completion. - when readline support is enable, a global vshControl object is made available by way of a macro/function. When readline support is disabled, the global is not included and the macro simply returns NULL. This global is required for smart completers. - the code which is used by the "list" command has been moved from virsh-domain-monitor to virsh-completer. This way, it is accessible to both the "list" command code and the domain completer. Note that none of the options which use the domain completer currently have flags set to indicate whether active or inactive domains should be completed. If this completion patch-set is OKed, then I will go back and add these flags. Currently, the commit is there simply to make testing out the new completion easier. Solly Ross (5): Improve virsh autocompletion (extract parser) Improve virsh autocompletion (base framework) Improve virsh autocompletion (global ctl object) Improve virsh autocompletion (domain completer) Improve virsh autocompletion (enum completer macro) outgoing/0000-cover-letter.patch | 68 + ...prove-virsh-autocompletion-extract-parser.patch | 428 ++++++ ...prove-virsh-autocompletion-base-framework.patch | 278 ++++ ...ve-virsh-autocompletion-global-ctl-object.patch | 116 ++ ...ove-virsh-autocompletion-domain-completer.patch | 1479 ++++++++++++++++++++ ...virsh-autocompletion-enum-completer-macro.patch | 131 ++ tools/Makefile.am | 3 +- tools/virsh-completer.c | 353 +++++ tools/virsh-completer.h | 86 ++ tools/virsh-domain-monitor.c | 287 +--- tools/virsh-domain.c | 72 + tools/virsh-snapshot.c | 11 + tools/virsh.c | 517 +++++-- tools/virsh.h | 13 + 14 files changed, 3447 insertions(+), 395 deletions(-) create mode 100644 outgoing/0000-cover-letter.patch create mode 100644 outgoing/0001-Improve-virsh-autocompletion-extract-parser.patch create mode 100644 outgoing/0002-Improve-virsh-autocompletion-base-framework.patch create mode 100644 outgoing/0003-Improve-virsh-autocompletion-global-ctl-object.patch create mode 100644 outgoing/0004-Improve-virsh-autocompletion-domain-completer.patch create mode 100644 outgoing/0005-Improve-virsh-autocompletion-enum-completer-macro.patch create mode 100644 tools/virsh-completer.c create mode 100644 tools/virsh-completer.h -- 1.8.3.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list