Table of Contents

go back

Windows is infamous to make everything as difficult as possible.

Here I write the steps to make the experience of using Windows a bit less of a pain.

Command line

cmd.exe is terrible, Powershell is a monstrosity… What can we do?

MSYS2 is a software distro and building platform for Windows

It gives bash and a pacman implementation for Windows. Don't forget to add ILoveCandy under the misc options of /etc/pacman.conf.

With it one can easily install tmux and have a good console. Just open the Start menu, type “min” and press enter!

This is also a good way to install the GCC and the Clang compilers.

Msys2 path mangling

Since Windows expects paths like c:/Users/Sato/ and Unix expects paths like /home/Sato the Msys2 shell does path mangling so that windows programs will find what is expected.

For example, one types:

./prg.exe / /c/Users/Sato/Music/

and the passed arguments (argv in C parlance) are:

C:\msys64\home\Sato\prg.exe
C:/msys64/
C:/Users/Sato/Music/

Normally this is fine, but seldom it breaks programs. To disable it one needs to setup an environment variable: MSYS2_ARG_CONV_EXCL (Documentation).

Docker

A common example is docker for windows. One probably wants an alias in their ~/.bashrc.

alias docker='MSYS2_ARG_CONV_EXCL="*" docker'

So that Msys2 won't mangle any path.

TTY-sensible programs

Few programs, like nodejs, have problems using Msys2. When you execute them the console seems to hang. It happens because they expect the stdout do be a TTY, in other words stdout must follow the terminal interface protocol.

The Mysys2 shell does not:

$ node -p -e 'Boolean(process.stdout.isTTY)'
false

Fortunately there is a solution: the program winpty

$ winpty node -p -e "Boolean(process.stdout.isTTY)"
true

Let us see in action:

$ node

Nothing happens, until you press CTRL-C stopping it.

$ winpty node
Welcome to Node.js v13.11.0.
Type ".help" for more information.
>

Much better! winpty can be installed with pacman.

Admin access

Seldom one needs to execute a command as superuser.

The simple solution is executing the console as superuser to start other programs.

Press Super + R, write C:\msys64\msys2_shell.cmd, and press Shift+Ctrl+Enter.

Scripting

One cannot expect that bash is installed in every Windows, besides in Windows one often needs to press buttons and wait for windows. So… classic bash scripting might not be the best idea.

AutoIt v3 is a freeware BASIC-like scripting language.

Scripting language able of automating the Windows GUI and that compiles in self-contained .exe files.

Clipboard from the command line

Windows now have clip a program to read content from stdin and write in the clipboard. However the help message does not tell anything about the encoding clip expects. The encoding is utf-16le, so one needs to use:

 iconv -f utf-8 -t utf-16le | clip

Also it can be useful to consider sfk.exe to be able to read from the clipboard (among other things sfk.exe does).