From c0f8d49b223ec6ec05783eac1a6b3710d70dc4f7 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Thu, 6 Oct 2011 17:18:38 +0100 Subject: [PATCH] xl: wrap help output if command name is too long Without this in the "xl help" line for pci-list-assignable-devices the command name merges with the first word of the help. Since the bash completion support parses "xl help" this leads to "pci-list-assignable-devicesList" being presented as an option instead of the correct command name. We also need to filter out lines which start with more than one space in the bash completion support to stop "List" appearing as a possible command name after the change to wrap it. Doesn't address the fact that some help text overflows 80 columns. Signed-off-by: Ian Campbell Acked-by: Ian Jackson Committed-by: Ian Jackson --- tools/libxl/bash-completion | 2 +- tools/libxl/xl_cmdimpl.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/libxl/bash-completion b/tools/libxl/bash-completion index b184f7494d..513d28e9b6 100644 --- a/tools/libxl/bash-completion +++ b/tools/libxl/bash-completion @@ -11,7 +11,7 @@ _xl() xl=xl if [[ $COMP_CWORD == 1 ]] ; then - opts=`${xl} help 2>/dev/null | sed '1,4d' | awk '{print $1}' | sed 's/$/ ,/g'` && COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + opts=`${xl} help 2>/dev/null | sed '1,4d' | awk '/^ [^ ]/ {print $1}' | sed 's/$/ ,/g'` && COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) return 0 fi diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 8d20647979..99e3c49e97 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -1728,9 +1728,12 @@ void help(const char *command) if (!command || !strcmp(command, "help")) { printf("Usage xl [-vN] [args]\n\n"); printf("xl full list of subcommands:\n\n"); - for (i = 0; i < cmdtable_len; i++) - printf(" %-20s%s\n", - cmd_table[i].cmd_name, cmd_table[i].cmd_desc); + for (i = 0; i < cmdtable_len; i++) { + printf(" %-19s ", cmd_table[i].cmd_name); + if (strlen(cmd_table[i].cmd_name) > 19) + printf("\n %-19s ", ""); + printf("%s\n", cmd_table[i].cmd_desc); + } } else { cmd = cmdtable_lookup(command); if (cmd) { -- 2.39.5