[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)