7 ms·
Show HN: Rich-CLI – A CLI toolbox for highlighting, Markdown, JSON and rich text
- willm 5y agoHi HN, This is a command line tool I’ve been working on for rendering various types of content in the terminal. The core functionality is syntax highlighting with line numbers and indent guides. It can render Markdown (commonmark), and does a reasonable job given the limitations of Terminal emulators. It can render JSON with syntax highlighting. Finally it can display general purpose rich text with “console markup” (like bbcode). All of the above can have borders, styles, alignment applied independently. This was written hastily, the majority of it came together over a single weekend. This is because it was built with Rich (a Python library which I am also the author of) which does the heavy lifting. Currently you can install it as a Python package, but I plan on adding it to other channels so you can get it via your preferred package manager. I know there are some excellent apps with equivalent features but I’m hoping this will become a versatile tool for developers (in particular). I’ll be adding more formats in the future. Hope you find it interesting. I’ll be around for a while to answer questions.
- simonw 5y agoProgress bar support would be really interesting - providing a neat way to add progress bars to shell scripts that do a bunch of work. Not sure how to go about designing a CLI tool that adds progress bars to things that might involve executing other shell commands though - I guess "pv" is good prior art here.
- willm 5y agoThis is good idea. Will investigate how to pipe data and display a progress bar at the same time.
- pletnes 5y agotqdm already does this. It’s also a python package. https://tqdm.github.io/docs/cli/ https://tqdm.github.io/docs/cli/
- simonw 5y agoThat's awesome - I've used tqdm as a Python library before (mainly within Jupyter notebooks) but I hadn't spotted that CLI version of it.
- pletnes 5y agoCan it render git diffs / git difftool?
- willm 5y agoNope, but that would be a nice addition.
- baggiponte 5y agoHow do you add a new line? I tried $ rich --print "\n hello world" but it just returned \n hello world Also, where can I find the list of emoji and the correspondent ":description:"?
- blooalien 5y agoBro, you are a Python GOD! I been just loving everything about Rich since I discovered it, and your other Python related tools have been fantastic as well. Permanent parts of my "Python toolbox", alongside "Click", "Flask", "Requests", and a bunch of other equally excellent such goodies. Thank you so very much for creating the things you do, (and for publishing them under FOSS licenses).
- stonecharioteer 5y agoI remember when you first shared rich. It was so cool. It's been great watching your output increase so quickly Will. Thanks for all the hard work. Does this support paging? I could see myself using this a lot for markdown files if it does. And do you plan on supporting RST files?
- willm 5y agoPager and RST support is coming :)
- stonecharioteer 5y agoYou da best.
- leonim 5y agoThanks Will for creating Rich. I'm also a big fan of Rich. Are there any plans to make it easy to generate the Rich tables from the command line? Such as from CSV, TSV, JSON/L, or even SQLite databases?
- mr-karan 5y ago[rich](https://news.ycombinator.com/item?id=29945848 https://news.ycombinator.com/item?id=29945848) was recently discussed as well.
- simonw 5y agoI really like the potential this has to add more compelling output to simple shell scripts: #!/bin/bash rich "Starting process" --rule --rule-style "red" # ... do some stuff rich "Process [b]complete[/b]" -p -c --padding 1 --style "on blue"
- baggiponte 5y agoI have been looking for something like this for a long time T.T
- tinalumfoil 5y agoCouldn't you do something like this instead? echo "$(tput setaf 1)Starting process$(tput sgr0)" echo " $(tput setaf 2)Process $(tput bold)complete$(tput sgr0)"
- deleted 5y ago[deleted]
- deleted 5y ago[deleted]
- patrick91 5y agoThis looks great! Congrats on shipping! My only nit is that it needs some paddings
- willm 5y agoWhat kind of paddings?
- jpm48 5y agoThis is going to be useful for many things in my teaching. I've just got my students to install Rich / textual for my python coding course as I've featured it as one of my Modules of the week. https://nccastaff.bournemouth.ac.uk/jmacey/msc/PipeLineAndTD/motw/textual/ https://nccastaff.bournemouth.ac.uk/jmacey/msc/PipeLineAndTD... So this will come in handy. Great work.
- willm 5y agoThanks. Hope your students also enjoy it!
- amanzi 5y agoThis is great as a general replacement for the `cat` command, especially with the `-n` argument to add line numbers.
- chme 5y agoLooks similar to bat: https://github.com/sharkdp/bat https://github.com/sharkdp/bat
- josephg 5y agoThis looks great! I’d love something like this for the rust code I’ve been working on lately. Does anyone know of a similar library in rust?
- baggiponte 5y agoThat's beautiful! Maybe adding tab completions would be useful? For example: $ rich "hello world" -p -a <TAB> ... Where "..." is all the possible values that can be taken in.
- willm 5y agoI think Click can do that. I’ll look in to it for the next version.
- baggiponte 5y agoSo you are using Click and not Typer?
- simonw 5y agoTyper uses Click under the hood.
- baggiponte 5y agoYeah, that I knew: why Click over Typer? Greater control in creating the CLI?
- willm 5y agoThat’s right. I would usually reach for Typer for CLIs. I chose Click because I wanted to extend the —-help and I wasn’t certain If Typer exposed the internals.
- zsolt_terek 5y agoI love this tool! I'm currently experiencing issues with the pager in the gnome-terminal, but I'm guessing the build in pager is quite a new functionality so I'm patient. Thanks!