Where there is a Will

Will McGugan's Blog

I am a freelance software engineer living in Edinburgh.

I post mostly about tech (particularly Python) and photography.

Background: A code monkey

I get a kick out of being creative within the limitation of the terminal. I may even have come up with with an entirely new way of drawing boxes in the terminal. As bizarre as that sounds.

Boxes in the terminal are not new. Rich is full of them, but they predate Rich by a long time.

CLI apps will typically use box drawing characters to build boxes out of unicode characters. There are characters for vertical lines, horizontal lines, corners, and cross pieces. With a mixture of regular, heavy, and double lines. Even rounded corners. They work like lego: throw them together in the right order and you can display exotic things such as panels and tables at the command prompt.

But there is a problem. Look what happens when you set a background color:

A Rich panel. continue reading…

Rich recently added two interesting new features.

The first feature is SVG support. Anything printed to the terminal with Rich can be captured and exported to an SVG file. The output is somewhat like a screenshot but generated within Rich itself (it doesn't peek at your desktop).

A SVG generated from Rich (converted to a PNG).

I think these SVGs will be useful for sharing terminal output, particularly for documentation.

The API to save SVGs works in the same way as the methods to save / export text and HTML. Here's the code that generated the above image: continue reading…

Reposting this from blog.textualize.io.

My name is Will McGugan. I am the creator of Rich and Textual, and the founder and CEO of Textualize. At the end of last year I took a year off to work on my Open-source projects and develop an idea that I believe will allow the terminal to eat some of the browser’s lunch. Turns out this idea was compelling enough to attract some sweet sweet VC cash and I am now hiring a third Python developer to join the company.

At Textualize we offer a competitive salary, 33 days holiday a year, a health plan, and standard benefits. But more importantly, a friendly and supportive workplace that values work-life balance. continue reading…

I've published a number of Open Source Python libraries, but none have seen as much buzz as Rich. Released in 2020, the Rich repo has 35,000 stars on Github. Since then I've released Textual (a work in progress) and Rich-CLI, both of which are on a similar trajectory as far as GitHub stars go.

In this post I'd like to lay out what I think contributed to the popularity of Rich, which you can hopefully apply to your own open source project(s).

Too the moon! You may start to see more Richified apps soon. Including Pip, which recently adopted Rich progress bars and more. continue reading…

I've just released v0.1.15 of Textual, with Windows support.

The Windows support is somewhat experimental, but so far seems solid. You will get best results on the new Windows Terminal. On the classic command prompt you might find a reduced color palette. This works on VSCode, but is missing mouse input on Windows 10 due to an upstream issue which is apparently fixed in Windows 11. If you have Windows 11, I'd appreciate confirmation on that!

This is the code_viewer example in the Textual repo. continue reading…

I'm trialing the idea of Weeknotes, a weekly summary of what I've done / learned in the prior week. Inspired by Simon Willison who has an uncanny ability to respond to a tweet with a link to a weeknote of his containing just the information you needed. These will be a little rougher, a little less edited, than my usual content. But the point is to get something out there and to develop the habit of writing.

The investment for Textualize landed at the end of last year, just before Christmas. Naturally I was on a bit of a high. This last week-and-a-half I've come down to earth and settled in to a routine of going in to the office every day (something I swore I'd never do again). And it's not so bad. continue reading…

Before my recent career change I described myself as a full stack web developer (hey I built this blog). When I started building web sites professionally the work that a front-end developer did was considered a lesser form of software development, requiring a less academic set of skills than the developers who wrote code to talk to databases and serve APIs.

Now I'm not convinced that was true even back in the day, and it is not even remotely true now (I might go as far to suggest the reverse may be true). Just one of the skills you need for front end development is CSS, the code which defines how a web page looks. There is a lot to learn and to wield CSS well. continue reading…

I recently posted about my plans to take a "year off" to work full time on open source. The TL and DR of it was that I would live on savings while working on Rich and Textual, both of which where generating a bit of buzz in the Python community.

Additionally, I would work on a cloud service using both those projects which at some point would become a business.

Now this was a good plan. The money from GitHub sponsors which I had previously been donating to charity would take the sting out of not having an income for a while. While far from a salary (where I live), at around $1000 a month it would help pay a few bills. continue reading…

I recently came to a decision which will have a big impact on my open source work. In particular Rich and Textual, but also pyfilesystem and lomond. For the foreseeable future, possibly up to a year, I'll be working on them essentially full time.

Rich is a very popular project now, with over 29K stars on Github. It has near 100% coverage and a stable API, but no codebase is ever really finished so there will be on-going work. Textual is Rich's sister project which is brand new and under active development, but already has 4.8K stars. It is also a much larger project than Rich. To do Textual justice I'm going to need to put in some serious time over and above what I could realistically do for a hobby project.

Some of the applications in the Textual examples directory continue reading…

If you work with JSON regularly (90% of Python developers I suspect) you might appreciate the print_json function just landed in Rich v10.9.0

If you call this function with a string, Rich will decode the string, reformat it, and print it to the console with nice syntax highlighting. Here's an example:

Here's the output:

Calling print_json with a string will decode the JSON and pretty print it.

Note that the atomic values false, true, and null have their own color. I find this helpful when scanning a JSON blob.

If you call print_json with a data keyword argument it will encode that data and pretty print it in the same way.

Here's the output:

Calling the print_json function with a data keyword argument. continue reading…