On Thu, Mar 3, 2022, 5:43 PM Eric Blake <ebl...@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 <ebl...@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 > >