[libvirt] [PATCH] virsh: Honor reedit opts printing to a function

Eric Blake eblake at redhat.com
Wed Jun 13 12:17:54 UTC 2012


On 06/13/2012 03:54 AM, Michal Privoznik wrote:
> When printing reedit options we make stdin raw. However,
> this results in stdout being raw as well. Therefore we need
> to return carriage when doing new line. Unfortunately,
> '\r' cannot be part of internationalized messages hence
> we must move them to formatting string which then in turn
> become huge and disarranged. To solve this, a new function
> is introduced which takes variable string arguments and
> prepend each with "\r\n" just before printing.
> ---
>  tools/virsh.c |   25 +++++++++++++++++++++----
>  1 files changed, 21 insertions(+), 4 deletions(-)

Looks nice.

> 
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 90ea43d..6840b92 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -655,6 +655,21 @@ vshReconnect(vshControl *ctl)
>      ctl->useSnapshotOld = false;
>  }
>  
> +static void
> +vshPrintRaw(vshControl *ctl, ...)
> +{
> +    va_list ap;
> +    char *key;
> +
> +    va_start(ap, ctl);
> +    while ((key = va_arg(ap, char *)) != NULL) {
> +        vshPrint(ctl, "\r\n%s", key);
> +    }
> +    vshPrint(ctl, "\r\n");

This both prepends and ends with a newline.  I think it would be a
little bit simpler if it only ever added newlines on the end.  Callers
would then...

> +
> +    va_end(ap);
> +}
> +
>  /**
>   * vshAskReedit:
>   * @msg: Question to ask user
> @@ -690,10 +705,12 @@ vshAskReedit(vshControl *ctl, const char *msg)
>          c = c_tolower(getchar());
>  
>          if (c == '?') {
> -            vshPrint(ctl, "\r\n%s", _("y - yes, start editor again\n"
> -                                      "n - no, throw away my changes\n"
> -                                      "f - force, try to redefine again\n"
> -                                      "? - print this help\n"));
> +            vshPrintRaw(ctl,

...start with a "" (untranslated, since _("") doesn't do what you think)
if they want to also prepend a newline.

> +                        _("y - yes, start editor again"),
> +                        _("n - no, throw away my changes"),
> +                        _("f - force, try to redefine again"),
> +                        _("? - print this help"),
> +                        NULL);
>              continue;
>          } else if (c == 'y' || c == 'n' || c == 'f') {
>              break;

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120613/dc424ae8/attachment-0001.sig>


More information about the libvir-list mailing list