[HN Gopher] Rich: A Python library for rich text and formatting ...
       ___________________________________________________________________
        
       Rich: A Python library for rich text and formatting in the terminal
        
       Author : willm
       Score  : 298 points
       Date   : 2022-01-15 12:28 UTC (10 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | bitigchi wrote:
       | I am not sure if it's only me, but as time passes I find myself
       | using more and more simple Terminal stuff. No fancy air/earth
       | lines, no fancy formatting, no fancy ligatures or typefaces.
        
         | JoelEinbinder wrote:
         | What's an air/earth line?
        
           | cturtle wrote:
           | Fancy shell prompts, often requiring patched fonts. Something
           | like powerlevel10k[0] or starship[1]
           | 
           | [0]: https://github.com/romkatv/powerlevel10k
           | 
           | [1]: https://starship.rs/
        
         | sdfgsdf wrote:
         | Perhaps because you're gradually learning to distinguish what's
         | style and what's substance?
        
         | yeetaccount4 wrote:
         | Same. I don't even use syntax highlighting anymore. It changes
         | how you focus.
         | 
         | Not sure how people put up with all that powerline stuff
         | either, or multi-line PS1s that have shit on either side.
         | Reminds me of geocities.
        
         | jonpalmisc wrote:
         | I tend to agree with this. I'm not anti-formatting, but it
         | seems that in the majority of cases, the "formatting" isn't
         | done artfully, and actively makes it harder to read command
         | output, etc.
        
           | mattgreenrocks wrote:
           | Yeah, it's the lack of taste that gets to me.
           | 
           | Many 'modern' CLI prompts look like an emoji trashheap
           | affixed with a lot of status information that eats up space
           | and isn't directly actionable.
        
         | TheCondor wrote:
         | We have 5k monitors, Gpus with 12GB of RAM, fast networks, etc.
         | color in consoles, underline, bold and italics seem overdue.
         | 
         | What rubs me wrong is the collective halfassedness of it all.
         | When less craps out ANSI codes, when the terminal tears and
         | your cursor is offset because it got confused about control
         | characters, dozens of different color configs rather than a
         | system theme.
         | 
         | There was this time in the Linux dark ages, red hat Linux 2
         | era. The enlightenment window manager was considered part of
         | protocol GNOME, there were a lot of really exotic or organic
         | themes, skinning was the hotness. Windows couldn't do it. Ux be
         | damned, if you wanted your desktop to look like some sort of
         | demonic rune set, you could do it. Rationality, ux,
         | consistency, etc took over. Cli skinning never seems to grow
         | that way. I keep hoping some hacker that doesn't know better
         | will write a new terminal emulator, replaces ANSI codes with
         | some minimal html and invents console css and the community
         | embraces it.
        
           | willm wrote:
           | It is crazy, I agree. But you have to keep in mind how old
           | this protocol is. Layers and layers of cruft which you can
           | trace back to before the computing era. Here is Rich running
           | on a Teletype Model 33, circa 1963. And it works (kinda).
           | 
           | https://twitter.com/willmcgugan/status/1476940291819069441
        
             | dr_zoidberg wrote:
             | > Layers and layers of cruft which you can trace back to
             | before the computing era.
             | 
             | Even those layers and layers don't _have to_ slow things
             | down. Check the refterm "debacle" ([2] for the context, [0,
             | 1] as Muratori's answer to it). It's just the way things
             | are usually programmed doesn't care about performance and
             | how fast things really can be. I sometimes wonder in we're
             | not due for a massive round of optimization on a couple of
             | the layers that we're used to using/depend on.
             | 
             | [0] https://www.youtube.com/watch?v=hxM8QmyZXtg
             | 
             | [1] https://www.youtube.com/watch?v=99dKzubvpKE
             | 
             | [2] https://github.com/microsoft/terminal/issues/10362
        
             | TheCondor wrote:
             | No question, it cuts deep and we would/should look at it
             | end to end. A big part of it is all the tty/pty black magic
             | that we've just built on top of.
             | 
             | It's a gigantic task, but when I see new folks
             | reimplementing "ls" as a "modern replacement" and I do find
             | value with many of these tools (I love ripgrep and bat,
             | among others) I hope/wish someone felt the itch to tackle
             | this.
        
           | mncharity wrote:
           | > We have 5k monitors, Gpus with 12GB of RAM, [...stalled
           | progress...] What rubs me wrong is the collective
           | halfassedness of it all.
           | 
           | Shallow 3D UIs might be an opportunity for spring cleaning?
           | Playing with them years ago, my stack was full-screen browser
           | glued to kernel evdev - the rest of the usual stack (wm,
           | libinput, much of X, browser input events) was easier to
           | replace than adapt.
        
           | evilduck wrote:
           | https://hyper.is/
           | 
           | Someone has tried on macOS. It hasn't really seen mass uptake
           | though.
        
           | timmattison wrote:
           | Take a look at TermKit - https://github.com/unconed/TermKit
           | 
           | Long abandoned but I'd love something like this. Someone I
           | know tried to revive it but Node has changed so much that
           | they gave up.
           | 
           | I would donate to an effort to revive it.
        
             | TheCondor wrote:
             | Mozilla included such a terminal in the early seamonkey
             | days. I can't recall the name. You could "cat foo.jpg" and
             | it would render inline. It was a neat novelty. I think
             | graphics is where it goes too far.
             | 
             | Mainframes and minis modeled many apps as "screens." Some
             | blend of the streaming style text we have now, with
             | screens, with a new and understood set of protocols that
             | are similar to what we use everywhere else. I think some
             | sort of table in console html would be about my limit,
             | various "modern shells" already support tabular data with,
             | like, their three magic built ins.
        
               | petepete wrote:
               | Kitty has extensions (kittens) for displaying graphics:
               | https://sw.kovidgoyal.net/kitty/graphics-protocol/
               | 
               | Not something I use, I tend to just `xdg-open .` to view
               | them in Nautilus/EOG.
        
           | a-dub wrote:
           | i remember this era, i remember going to the oreilly oss
           | conference in monterey and all the public terminals were
           | running enlightenment with alpha blended terminals and all
           | the crazy chrome of the time.
           | 
           | personally i hated it, it was laggy, slow and unstable...
           | made a fast linux machine feel like a slow windows thing. i
           | think i ran windowmaker at the time with a color scheme that
           | reminded me of an old indy i used to have. it looked good and
           | stayed out of my way...
        
           | a9h74j wrote:
           | I would add: make the line protocol coming in transmit key-up
           | and key-down events -- not only full keypress events. Thus
           | let modifiers be handled on the receiving end.
           | 
           | Or at least as one perhaps-modal option.
        
             | kps wrote:
             | xterm-compatible terminals have been able to report
             | modifier state for about 15 years.
        
         | csdvrx wrote:
         | Personally, I find colors distracting, so I do the opposite: I
         | use text attributes more and more, like bold, faint, underline,
         | italics (...) even in my bash prompt
         | 
         | Example: https://raw.githubusercontent.com/csdvrx/bash-
         | timestamping-s...
        
         | planetafro wrote:
         | Oddly, I'm the opposite. Working in devops and vscode, I find
         | the visual aspect of color and logical formatting improves my
         | work dramatically. Small tools like "bat" vs. "cat" on the
         | terminal are great at quick data parsing for things like yaml,
         | json, and the like. Staying old school for the sake of old
         | school is a bit of a fallacy IMHO.
        
           | kortex wrote:
           | I'm the same way. Why waste time reading when syntax
           | highlighting draws your eyes to important info? Also, iTerm2
           | with triggers or whatever they are called? Magnifique.
           | 
           | I have limited focus as is, if I can make mental search
           | easier, it takes a noticeable cognitive load off.
        
           | sharikous wrote:
           | I understand you but bat, exa, etc.. have a huge downside. I
           | have to change many platforms and systems at work and I can't
           | be bothered to install all those new utilities in every new
           | system.
           | 
           | cat, ls, etc.. just work, bat has to be installed, and I have
           | a pretty high threshold for a utility to be so vital for me
           | that I absolutely have to install it in every Unix box I
           | work.
        
             | jmconfuzeus wrote:
             | I started to keep an Ansible playbook to setup everything
             | for me. Basically, it replaces most of the core utils with
             | modern alternatives like like cat -> bat, grep -> ripgrep,
             | top -> htop, and so on.
             | 
             | That way, I don't have manually install everything for new
             | systems or when I'm doing a clean install on one of my
             | existing systems.
        
               | ghostly_s wrote:
               | Github link?
        
               | jmconfuzeus wrote:
               | I haven't thought about making it public because it's
               | just a matter of using the get_url command to download
               | the binaries into /usr/bin and then outputting a .bashrc
               | and /etc/bash.bashrc that contains aliases for every
               | command like "alias cat=bat".
        
               | anchpop wrote:
               | You might enjoy looking into nix and nixos. It's designed
               | to make that workflow as bulletproof as possible. One of
               | my coworkers maintains a github repo that describes his
               | exact system, and can create a sandbox that behaves the
               | exact same as the one he's used to with one command (on
               | any machine that has nix installed).
        
               | dotancohen wrote:
               | The problem isn't getting these tools on our own systems.
               | The problem is getting these tools onto every box that
               | might have to SSH into sometime.
        
           | aniforprez wrote:
           | bat especially was a revelation. I don't think I'll ever use
           | cat again if I can help it. I recently found exa[1] which was
           | a bit too colorful for my taste but very nice too
           | 
           | [1] https://github.com/ogham/exa
        
             | paavoova wrote:
             | > I don't think I'll ever use cat again if I can help it.
             | 
             | I just tested simple concatenation and bat is over 10x
             | slower:                 $ time cat 1GiB 1GiB 1GiB 1GiB
             | >/dev/null       real 0m0.414s       user 0m0.014s
             | sys 0m0.400s       $ time bat 1GiB 1GiB 1GiB 1GiB
             | >/dev/null       real 0m4.257s       user 0m1.659s
             | sys 0m2.594s
             | 
             | Seems like a lot of these "modern" replacements lose what
             | the original simpler utils do well.
        
               | chrisdhal wrote:
               | I don't use bat as a replacement for cat, but as a
               | replacement for less. Sure, bat can concatenate a file,
               | but I'd say that's not the main use. The syntax coloring
               | of file contents is my favorite use case. Line numbers
               | and some of the other options are useful at times too.
               | Also, I don't think I've ever needed to concatenate
               | multiple gigabyte sized files (yes, I am sure it exists
               | for a lot of people, but would say it's not as common as
               | looking at a file).
        
             | goplayoutside wrote:
             | Have you tried LSDeluxe?
             | 
             | https://github.com/Peltoche/lsd
        
               | dotancohen wrote:
               | LSD has always been a favorite for those who like to
               | watch the pretty colours go by.
        
         | rajandatta wrote:
         | Absolutely. I still have a Terminal window open all the time to
         | do various tasks. The ability to say 'find me x or y or z' and
         | not having the overhead of looking through other visual
         | clutter. Plus a few well chosen directory jump shortcuts make
         | things easier.
        
       | jack_pp wrote:
       | Anyone know what font he's using for the screenshots?
        
         | atarian wrote:
         | It looks like Fira Code.
        
       | samwillis wrote:
       | See also Textual by the same developer. Really impressive work.
       | 
       | https://github.com/Textualize/textual
        
         | agumonkey wrote:
         | oh man                   python -m textual.app
         | 
         | is so satisfying. You get web like layout dynamicism without
         | the whole browser stack.
        
           | digisign wrote:
           | Widget layouts systems are older than the web. I would say
           | "much older", but after thirty years the much is not very
           | large in comparison any longer.
        
         | elteto wrote:
         | Woah. That calculator and file tree _look_ like native widgets.
         | Impressive indeed.
        
       | noufalibrahim wrote:
       | I've been following Will McGugan (the author) on twitter for a
       | while. I learnt PyGame from his book. He more or less documented
       | his thought processes on twitter and it's been very nice to see
       | it develop over time.
       | 
       | It got me thinking that, atleast for technology developers, this
       | is the ideal use of twitter. An uncensored "thoughtstream". Some
       | tools to mine that and extract lessons might be an interesting
       | project.
        
       | [deleted]
        
       | armchairhacker wrote:
       | Great library and an amazing README. I kind of wish this
       | functionality was built into the language tooling and other
       | languages.
        
       | zashackernews wrote:
       | It's Atreides and Hawat not Atriedies and Haway
        
       | jmakov wrote:
       | Having logging integrated would be awesome.
        
         | DoneWithAllThat wrote:
         | It has it, and I use this feature extensively. It's fantastic.
        
         | F00Fbug wrote:
         | Have a look at Loguru:
         | 
         | https://github.com/Delgan/loguru
        
         | budafish wrote:
         | Use the integrated logging handler. That's all you need.
        
       | asicsp wrote:
       | Past discussion:
       | 
       | Show HN: Python lib for rich text, markdown, tables, etc. in the
       | terminal (https://news.ycombinator.com/item?id=23070821 _2020, 47
       | comments_ )
       | 
       | Related discussion:
       | 
       | Textual: a Python text user interface with Rich as the renderer
       | (https://news.ycombinator.com/item?id=27526031 _7 months ago, 21
       | comments_ )
        
         | 0x008 wrote:
         | I feel this library gets posted here every month. But maybe it
         | is just my personal impression between HN and GitHub trending.
        
       | dayjah wrote:
       | The way structlog and rich work together makes for a really great
       | and simple development experience;
       | 
       | Stack traces are presented in a gorgeous fashion, log.debug lines
       | have lots of great meta data with them. I almost always start new
       | projects with those as my first imports.
        
       | rjzzleep wrote:
       | This looks interesting. Can anyone explain to me why cli rich
       | text editors seemingly died after DOS?
        
         | willm wrote:
         | Some Jerk called Tim Berners-Lee invented the "web"
        
         | mrits wrote:
         | I think the quick answer is that they most certainly didn't.
         | Vim or Emacs are popular and fill most use cases while
         | obviously working in dozens of other languages. For actual text
         | rendering use cases their are plenty of popular libraries such
         | as curses
        
           | rjzzleep wrote:
           | Emacs kinda allows for that and org mode is sort of a rich
           | text editing, but I'm actually talking about cli word like
           | things. There was a very popular German one whichs name I
           | forgot also, that people were using long into Windows 95/98.
        
       | ZeroGravitas wrote:
       | Is there a companion project for the input side of these apps,
       | like a modernized readline type thing yet?
        
         | pridkett wrote:
         | This would be so helpful. About a year ago I got the
         | combination of FZF and bat working for my command line history.
         | It's wild how much better and easier that makes it to find
         | complex commands from the past.
        
           | SnowflakeOnIce wrote:
           | What purpose does bat serve in showing command-line history?
        
         | adambyrtek wrote:
         | Take a look at prompt_toolkit which is a Python library used by
         | IPython among others: https://github.com/prompt-toolkit/python-
         | prompt-toolkit
        
         | aseipp wrote:
         | Isocline, a readline alternative by Daan Leijen (an absolute
         | legend) is about the closest I've found to this:
         | https://github.com/daanx/isocline
         | 
         | That said it doesn't push "input controls" quite to the extreme
         | Rich/Textual do for UI controls, but it might be a starting
         | point to look into.
        
       | asimjalis wrote:
       | I especially like pretty print in rich. Makes it so much fun to
       | introspect on deeply nested objects and JSON.
        
       | nyellin wrote:
       | Very nice. Two other great python libraries for cli display are:
       | 
       | 1 tabulate: helps render ASCII tables in various formats
       | (https://github.com/astanin/python-tabulate)
       | 
       | 2. typer: write cli commands by decorating python functions. It
       | uses type annotations to automatically parse input
       | (https://typer.tiangolo.com/)
       | 
       | We're using both of those in our Kubernetes troubleshooting tool
       | (https://robusta.dev). Going to look at adding Rich too
        
         | qorrect wrote:
         | I've found https://github.com/salt-die/nurses_2 recently , if
         | you're looking for more graphics in the console.
        
           | nyellin wrote:
           | Thanks, looks cool and I wasnt familiar with it.
           | 
           | We're actually sending data to both terminal and non terminal
           | destinations like Slack/MsTeams. We render to html or
           | markdown when we can, but sometimes we have to fall back to
           | ASCII.
           | 
           | If you're curious, you can see the way we're using tabulate
           | here:
           | 
           | https://docs.robusta.dev/master/developer-
           | guide/actions/find...
        
       | pedrovhb wrote:
       | An extremely useful hidden gem in Rich is its `inspect` function
       | [1].
       | 
       | When called on an object, it pretty prints a list of its public
       | attributes (though you can also request private and dunder
       | attributes) [2]. It can also be called on a class or function;
       | it'll then pretty print the docstrings, parameters with types,
       | methods, etc. It's great for debugging and for starting to code
       | with libraries you're not familiar with, don't have comprehensive
       | documentation, or have some dynamic aspect.
       | 
       | In a similar vein, `objexplore` [3] is another library that lets
       | you dive into an object's nested attributes to understand how
       | it's laid out.
       | 
       | In interactive debugging sessions I often find these to be more
       | useful than the IDE's features which provide similar
       | functionality.
       | 
       | [1]
       | https://rich.readthedocs.io/en/stable/reference/init.html#ri...
       | 
       | [2] https://i2.paste.pics/798cff2903f6b3351289a24c839d4f44.png
       | 
       | [3] https://github.com/kylepollina/objexplore
        
         | orf wrote:
         | The ipython ? Syntax also does this: "some_object?"
        
           | dr_zoidberg wrote:
           | IPythons ? and tab-autocomplete feel like superpowers when
           | exploring a new module you're unfamiliar with.
        
       | rajandatta wrote:
       | The library looks brilliant! The author's clearly put a lot of
       | thought and effort into it. Looking forward to using it.
        
       | iqanq wrote:
       | I hate CLI utilities that think they are so cool for turning my
       | terminal into a disco.
        
         | willm wrote:
         | Colour hating curmudgeons can set NO_COLOR env var, which Rich
         | will respect.
        
           | Zababa wrote:
           | Not what you replied to in the first place, but for some
           | people it's not about hate, it's about color blindness or bad
           | vision. I'm glad Rich has an option for that.
        
         | kortex wrote:
         | So don't use them or configure your terminal for monochrome? I
         | for one welcome the disco.
         | 
         |  _Well, you can tell from the way I use nGrok, I 'm a jq man,
         | no time for awk_
        
       ___________________________________________________________________
       (page generated 2022-01-15 23:00 UTC)