February 24, 2020

The New Windows Terminal – Exploring CLIs, Shells, & Terminals

Disclaimer: I imported this post from WordPress to Jekyll on 9/2/23. Forgive the misformatting until I get a chance to clean it up.

Focus on CLIs

The new Windows Terminal has been an invaluable tool as I have been focusing on developing my CLI skills recently. For me, this has included:

As a .NET developer, Windows is my ideal platform due to first-class tooling (Visual Studio). That could be changing; but, for now, Windows makes sense as a primary environment.

Despite using Windows, I began learning CLIs when I first started managing Ubuntu instances for hosting various applications. When trying to navigate around my Windows file system, I often struggle remembering to type dir instead of ls (for listing files), ; instead of && (for chaining operations), etc.

For this reason, I like to reach for *nix-ish solutions on Windows.

Terminals, Emulators, and Shells

Let us define some terms.

Terminal

Technically, a terminal was a physical device (think text-only monitor) that collects input and displays output on an early computer.

Terminal Emulator

A terminal emulator is a software application that runs inside a GUI environment emulating an old terminal. We typically refer to these as terminals or consoles today.

Examples:

Shell

A shell is a text-based program that we execute from a terminal emulator. On Windows, these applications seem to be called “command interpreters”, but they are analogous in concept to a *nix shell.

Examples:

The New Windows Terminal

For the past year or two, I have used Cmder with its default ConEmu emulator. It provides a virtual *nix abstraction on top of the Windows API. It is a solid tool, but I have experienced it to be a bit sluggish at times.

When the first preview of the new Windows Terminal launched, I played with it a bit and I was impressed by its design and performance. Over the last couple of weeks, I have done some more research and configuration and have fallen in love with this new app.

Installation

choco install microsoft-windows-terminal

Configuration

Microsoft is working on a settings UI for Windows Terminal; but, for now, the settings are all configured in JSON. Here is a gist sample of my current configuration. In essence, the settings file just tells the app where to look for the shell executable and what fonts to use (I am enjoying Fira these days).

My Current Shells

Next Steps

In the future, I look forward to…