qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Thomas Huth <thuth@redhat.com>,
	Beraldo Leal <bleal@redhat.com>,
	Qemu-block <qemu-block@nongnu.org>,
	qemu-devel <qemu-devel@nongnu.org>,
	Hanna Reitz <hreitz@redhat.com>, Cleber Rosa <crosa@redhat.com>
Subject: Re: [PATCH 1/5] python/utils: add add_visual_margin() text decoration utility
Date: Fri, 4 Mar 2022 11:21:14 -0500	[thread overview]
Message-ID: <CAFn=p-b3KaP8zYHBDB0gZaxGgaGPtdywx9XgDtoxOgz5VYGqdQ@mail.gmail.com> (raw)
In-Reply-To: <20220303224341.zkiv7gzcmirogwf7@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 3700 bytes --]

On Thu, Mar 3, 2022, 5:43 PM Eric Blake <eblake@redhat.com> wrote:

> On Thu, Mar 03, 2022 at 03:58:58PM -0500, John Snow wrote:
> > >>> print(add_visual_margin(msg, width=72, name="Commit Message"))
> > ┏━ Commit Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
> > ┃ add_visual_margin() takes a chunk of text and wraps it in a visual
> > ┃ container that force-wraps to a specified width. An optional title
> > ┃ label may be given, and any of the individual glyphs used to draw the
> > ┃ box may be replaced or specified as well.
> > ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
>
> I see you dropped the right margin compared to earlier versions, but
> agree that this is still a nice visual indicator, and probably easier
> to maintain in this form.  And it got rid of the weird spacing on the
> left when the wrap point hit at the wrong time.
>
> > +    Decorate and wrap some text with a visual decoration around it.
> > +
> > +    This function assumes that the text decoration characters are single
> > +    characters that display using a single monospace column.
> > +
> > +    ┏━ Example
> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
> > +    ┃ This is what this function looks like with text content that's
> > +    ┃ wrapped to 72 characters. The right-hand margin is left open to
> > +    ┃ acommodate the occasional unicode character that might make
> > +    ┃ predicting the total "visual" width of a line difficult. This
> > +    ┃ provides a visual distinction that's good-enough, though.
> > +
> ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
>
> Yep - hand-waving away Unicode messiness is certainly easiest ;)
>

I started reading the unicode specification for determining the number of
"visual grapheme clusters" in a string, got a headache, and gave up.

(See also the PyPI package "grapheme", which was last updated for unicode
13.0 and appears unmaintained. It's no small amount of code!)

I could write a function that gives a *pretty good estimate*, but I don't
want to maintain something like that.

Urwid has functions that give *great* estimates, but I'd like to avoid
dependencies.

Leaving the right margin open was the quickest, cleanest hack :) I'm amazed
at how hard this is to accomplish.

(See https://hsivonen.fi/string-length/ which ought to be required reading
in all CS classes from now on.)

Ultimately I took both this decoration and the exception code into utils as
an admission of guilt and a pledge to maintain what I did write ;)


> Reviewed-by: Eric Blake <eblake@redhat.com>
>
> [take with a grain of salt - my python is weak. But as you said in the
> cover letter, it's fairly straightforward to reproduce an environment
> where you can see it in action for hands-on testing]
>

I've long since given up on anyone understanding the Python I write.
Eduardo did, so he quit. 😅

Thanks for the reviews.


>
> --
> Eric Blake, Principal Software Engineer
> Red Hat, Inc.           +1-919-301-3266
> Virtualization:  qemu.org | libvirt.org
>
>

[-- Attachment #2: Type: text/html, Size: 5334 bytes --]

  reply	other threads:[~2022-03-04 16:24 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-03 20:58 [PATCH 0/5] iotests: add enhanced debugging info to qemu-img failures John Snow
2022-03-03 20:58 ` [PATCH 1/5] python/utils: add add_visual_margin() text decoration utility John Snow
2022-03-03 22:43   ` Eric Blake
2022-03-04 16:21     ` John Snow [this message]
2022-03-03 20:58 ` [PATCH 2/5] python/utils: add VerboseProcessError John Snow
2022-03-04  2:41   ` Eric Blake
2022-03-03 20:59 ` [PATCH 3/5] iotests: Remove explicit checks for qemu_img() == 0 John Snow
2022-03-03 20:59 ` [PATCH 4/5] iotests: make qemu_img raise on non-zero rc by default John Snow
2022-03-04  2:46   ` Eric Blake
2022-03-03 20:59 ` [PATCH 5/5] iotests: fortify compare_images() against crashes John Snow
2022-03-04  2:49   ` Eric Blake

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAFn=p-b3KaP8zYHBDB0gZaxGgaGPtdywx9XgDtoxOgz5VYGqdQ@mail.gmail.com' \
    --to=jsnow@redhat.com \
    --cc=bleal@redhat.com \
    --cc=crosa@redhat.com \
    --cc=eblake@redhat.com \
    --cc=hreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).