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 --]
next prev parent 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).