11 ms·
Rich: A Python library for rich text and formatting in the terminal
- bitigchi 5y agoI 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.
- planetafro 5y agoOddly, 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 5y agoI'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.
- aniforprez 5y agobat 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 https://github.com/ogham/exa
- goplayoutside 5y agoHave you tried LSDeluxe? https://github.com/Peltoche/lsd https://github.com/Peltoche/lsd
- dotancohen 5y agoLSD has always been a favorite for those who like to watch the pretty colours go by.
- paavoova 5y ago> 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 5y agoI 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).
- RMPR 5y ago> I just tested simple concatenation and bat is over 10x slower Seems like a recurring thing[0] with the modern alternatives. 0: https://news.ycombinator.com/item?id=29616727 https://news.ycombinator.com/item?id=29616727
- sharikous 5y agoI 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 5y agoI 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.
- anchpop 5y agoYou 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 5y agoThe 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.
- ghostly_s 5y agoGithub link?
- jmconfuzeus 5y agoI 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".
- jonpalmisc 5y agoI 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 5y agoYeah, 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.
- JoelEinbinder 5y agoWhat’s an air/earth line?
- cturtle 5y agoFancy shell prompts, often requiring patched fonts. Something like powerlevel10k[0] or starship[1] [0]: https://github.com/romkatv/powerlevel10k https://github.com/romkatv/powerlevel10k [1]: https://starship.rs/ https://starship.rs/
- TheCondor 5y agoWe 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 5y agoIt 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 https://twitter.com/willmcgugan/status/1476940291819069441
- TheCondor 5y agoNo 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.
- dr_zoidberg 5y ago> 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 https://www.youtube.com/watch?v=hxM8QmyZXtg [1] https://www.youtube.com/watch?v=99dKzubvpKE https://www.youtube.com/watch?v=99dKzubvpKE [2] https://github.com/microsoft/terminal/issues/10362 https://github.com/microsoft/terminal/issues/10362
- sdfgsdf 5y agoPerhaps because you're gradually learning to distinguish what's style and what's substance?
- rajandatta 5y agoAbsolutely. 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.
- yeetaccount4 5y agoSame. 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.
- csdvrx 5y agoPersonally, 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-sqlite/main/bash-timestamping.gif https://raw.githubusercontent.com/csdvrx/bash-timestamping-s...
- SavantIdiot 5y agoNope, not just you. Been coding since the 80's, and command-line tooling has become more noisy and less parser/redirect-friendly over the past decade (but option parsers have def. gotten better). To be fair, once terminals started supporting escape color codes, things started to fall apart (circa late 90's). IMHO. EDIT: Just noticed a peer comment below captures the issues with ANSI way better than I did.
- gloriana 5y agosame, it's too much to keep up with. would rather miss out at this point.
- gnubison 5y agoExact same thing happened to me. At one point I tried out not even including $(pwd) in the prompt, and … turns out it actually works fine.
- jack_pp 5y agoAnyone know what font he's using for the screenshots?
- atarian 5y agoIt looks like Fira Code.
- dayjah 5y agoThe 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.
- kubami 5y agodoes it just work out of the box?
- armchairhacker 5y agoGreat library and an amazing README. I kind of wish this functionality was built into the language tooling and other languages.
- rajandatta 5y agoThe library looks brilliant! The author's clearly put a lot of thought and effort into it. Looking forward to using it.
- samwillis 5y agoSee also Textual by the same developer. Really impressive work. https://github.com/Textualize/textual https://github.com/Textualize/textual
- agumonkey 5y agooh man python -m textual.app is so satisfying. You get web like layout dynamicism without the whole browser stack.
- elteto 5y agoWoah. That calculator and file tree _look_ like native widgets. Impressive indeed.
- jdnier 5y agoA good video walkthrough of Textual from September, 2021 with Paul Everitt interviewing the author, Will McGugan: A Look At – and Inside – Textual (https://www.youtube.com/watch?v=1kTWxamIJ_k https://www.youtube.com/watch?v=1kTWxamIJ_k).
- iqanq 5y agoI hate CLI utilities that think they are so cool for turning my terminal into a disco.
- willm 5y agoColour hating curmudgeons can set NO_COLOR env var, which Rich will respect.
- Zababa 5y agoNot 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 5y agoSo 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
- jmakov 5y agoHaving logging integrated would be awesome.
- budafish 5y agoUse the integrated logging handler. That's all you need.
- DoneWithAllThat 5y agoIt has it, and I use this feature extensively. It’s fantastic.
- F00Fbug 5y agoHave a look at Loguru: https://github.com/Delgan/loguru https://github.com/Delgan/loguru
- asicsp 5y agoPast discussion: Show HN: Python lib for rich text, markdown, tables, etc. in the terminal (https://news.ycombinator.com/item?id=23070821 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 https://news.ycombinator.com/item?id=27526031 7 months ago, 21 comments)
- 0x008 5y agoI feel this library gets posted here every month. But maybe it is just my personal impression between HN and GitHub trending.
- deleted 5y ago[deleted]
- ZeroGravitas 5y agoIs there a companion project for the input side of these apps, like a modernized readline type thing yet?
- pridkett 5y agoThis 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 5y agoWhat purpose does bat serve in showing command-line history?
- alin23 5y agoI'm guessing it's for showing a syntax highlighted preview of multi line commands. That's what I use it for. The UI would be similar to this: https://user-images.githubusercontent.com/700826/113683873-a42a6200-96ff-11eb-9666-26ce4091b0e4.png https://user-images.githubusercontent.com/700826/113683873-a...
- adambyrtek 5y agoTake a look at prompt_toolkit which is a Python library used by IPython among others: https://github.com/prompt-toolkit/python-prompt-toolkit https://github.com/prompt-toolkit/python-prompt-toolkit
- aseipp 5y agoIsocline, a readline alternative by Daan Leijen (an absolute legend) is about the closest I've found to this: https://github.com/daanx/isocline 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.
- rjzzleep 5y agoThis looks interesting. Can anyone explain to me why cli rich text editors seemingly died after DOS?
- mrits 5y agoI 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 5y agoEmacs 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.
- willm 5y agoSome Jerk called Tim Berners-Lee invented the “web”
- zashackernews 5y agoIt's Atreides and Hawat not Atriedies and Haway
- asimjalis 5y agoI especially like pretty print in rich. Makes it so much fun to introspect on deeply nested objects and JSON.
- pedrovhb 5y agoAn 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#rich.inspect https://rich.readthedocs.io/en/stable/reference/init.html#ri... [2] https://i2.paste.pics/798cff2903f6b3351289a24c839d4f44.png https://i2.paste.pics/798cff2903f6b3351289a24c839d4f44.png [3] https://github.com/kylepollina/objexplore https://github.com/kylepollina/objexplore
- orf 5y agoThe ipython ? Syntax also does this: “some_object?”
- dr_zoidberg 5y agoIPythons ? and tab-autocomplete feel like superpowers when exploring a new module you're unfamiliar with.
- nyellin 5y agoVery 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 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/ https://typer.tiangolo.com/) We're using both of those in our Kubernetes troubleshooting tool (https://robusta.dev https://robusta.dev). Going to look at adding Rich too
- qorrect 5y agoI've found https://github.com/salt-die/nurses_2 https://github.com/salt-die/nurses_2 recently , if you're looking for more graphics in the console.
- nyellin 5y agoThanks, 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/findings-api.html https://docs.robusta.dev/master/developer-guide/actions/find...
- noufalibrahim 5y agoI'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 5y ago[deleted]
- comonoid 5y agoIt seems Rich is not compatible with communism.