Lets face it, the default command line in Windows is pretty bad.
The terminal and the shell are functional, sure. But they’re not very comfortable to use and have a lot of problems.
There is “Powershell” however, which makes things better. But is it really that comfortable to use if you’re used to what is available on Linux / Mac?

For different shells like bash, and other GNU and Open Source tools there is, in Win10 insider builds at least, the “Windows subsystem for Linux” (WSL).
But that has its problems.

While you can access and modify all of your windows file, you cannot run a windows executable from WSL bash. Bummer…

Besides that, at the time of writing, you have to use Windows Insider builds for Win10 and not a full army of whatever might scare you will bring me to use them.

Of course, you can use “cygwin” to have bash or a different shell and run a set of popular GNU and other Open Source tools  on windows, just like WSL, sure.
And with cygwin you also have access to all of your windows files and you even can run windows executables from bash.
But still, it also has its problems.

Everyone of these “solutions” to make the command line experience on Windows better isn’t quite ideal.
All of them, pretty much, suffer from the same problem:
The terrible, terminal on Windows and its limited capabilitys.
There have been some improvements to the terminal though, but it’s still not optimal.

Having just a good shell in a bad terminal emulator (with problems) is simply not enough.

And if you are used to a nice terminal emulator like the wide variety available on Linux, or “iTerm2” on a Mac, with a shell like bash or zsh,

Craptastic cmd.exe
Craptastic cmd.exe

with abilitys to use a quake-like drop-down terminal, tabs or multipane terminals in a single window, using background image (for stylez and for lulz)….
The situation on Windows still looks like a joke.

 

So then, what can you do about it?

Simple: Not use Windows. Just use Linux and call it a day.
Stuck on Windows for Adobe CS or Gaming? Dualboot or use a VM with PCI-E pass-through, or dualboot; easy.
You can also always buy a Mac and call it a day, too! You can even build a Hackintosh!
Isn’t the world great?

No, it really isn’t. A Mac is for a lot of folks not really an option, they’re overpriced as shit, most of them have no GPU-horsepower, most of them throttle as shit if a heavy load hits for long than a minute, you can’t tinker with your hardware, and if you’re a sucker for loads of multiple monitors, like I am, Mac OS just doesn’t quite hit the mark.
And did I forget to mention, some people just despise Apple (and deservedly so)

A VM with PCI-E passthrough on Linux needs two GPUs, and again, if you’re a sucker for loads of multiple monitors, you’re integrated graphics won’t do the job.
Also you probably want some HDMI/DP splitters or monitors with multiple inputs, or else you have to replug you damn monitors all the time.

And for dualbooting, well, it is tedious, needs more storage and effectively means you have to maintain two OS installs.

Of course, you’d not be doing this just for a better shell, but I’m trying to make a point here…

So there really is no solution?

Well, there is nothing that is complete or perfect.
But I have found something rather nice, which in combination with other things, gives me most of the good stuff on Windows.

I’d like to introduce you to this handy little application and to my current setup.

ConEmu

ConEmu is a terminal replacement for Windows.
It works by wrapping / hooking commandline windows and presents them with a nicer GUI and extended features. It even works with simple GUI applications!

ConEmu has a boatload of settings,

  • can by default wrap/hook all console windows
  • support for a metric butt-ton of hotkeys
  • features tabs and multipane terminals
  • transparency
  • background image for console

    ConEmu Color settings
    ConEmu Color settings
  • comes with default support for wrapping putty / DOSBox
  • and many many other great things missing from the default Windows terminal.

And guess what, it even has a quake-style drop-down terminal option!

Boatloads of Conemu terminals incl. quake-style terminal

Clink tab completion in cmd
Better tab completion using Clink

So we now have a nice Terminal emulator.
Default commandline autocomplete is still bad…
Heres Clink,

which gives you bash style autocomplete in the cmd.
I mainly use bash right now, so I don’t really need it anymore, but I have it installed just in case.

I have setup ConEmu to wrap every commandline window by default, and multi instance mode, so I can quickly open a cmd / Powershell as I’m used to with the (already setup) makro-keys on my keyboard.
I also have a quake-style drop-down terminal that runs cygwin bash by default, and starts up at boot.

The cygwin bash runs in mintty.

Task for using ConEmu connector
Task for using ConEmu connector

But ConEmu doesn’t work with cygwins mintty by default…
However, ConEmu has the excellent console connector addon, with which you can integrate cygwin nicely into ConEmu without sacrifices!

I used plain old cygwin instead of WSL because, not only do I not have to jump on the Windows Insider bandwagon, but I can also run windows executeables and batch files from bash with it.

In my cygwin install I also linked a few windows executables to /usr/local/bin so I can run windows versions of things like ruby, instead of the cygwin one, or notepad++ for when I don’t feel like using vim…
I also wrote myself some shell scripts and also linked them.
I now can have more Linux like commands for shutdown and reboot. You know, “reboot now” types nicer than “shutdown /r /t 0

By the way: A handy little tool you might want is apt-cyg,  a package manager for cygwin.
For the quake-style terminal, I exported my ConEmu config-file and then edited that one:

  • to be always on top
  • have the quake-style enabled
  • not hook / wrap any commandline windows (this one’s crucial!)
  • don’t show up in the Taskbar

Then I just added ConEmu to run at boot like this “PATH_TO\ConEmu64.exe” -loadcfgfile “PATH_TO_MY_ConEmuQuakeConfig.xml” -MinTSA