Sonntag, Oktober 27, 2019

Windows Powershell Enhancements

DOS-Box: Next Generation

Wer als Entwickler behauptet, er arbeitet unter Windows, der erntet von seinen Linux/MacOS Kollegen ein müdes lächeln. Die Ursache dafür scheint allein in der vernachlässigten Shell zu liegen. Bei den IDEs sah es bei Microsoft nie schlecht aus. Eher war die Windows Plattform hier Vorreiter, wenn man an Tools wie Visual Studio oder Eclipse in früheren Jahren denkt.

In einer Sache sind Linux und MacOS den Windows Besitzern immer noch weit überlegen: Die Kommandozeile, Shell oder Terminal kann unter Linux / MacOS einfach mehr. Zwar kann der Windows Besitzer cygwin installieren, eine perfekte Integration ist das nicht (immer). Man denke nur an die unterschiedlichen Pfade: ‘/’ statt ‘\’. Mit oder ohne /cygwin Root. Oder die Tools die doppelt installiert werden, z.B. git oder ssh. Das hat mittlerweile auch Microsoft erkannt und rüstet an dieser Front auf, um (mehr) Entwickler auf die Windows Plattform zu ziehen. Eine der vielen Initiativen ist die Powershell. Ich bin kein Spezialist, was Shell Skripte anbelangt, aber so richtig anfreunden konnte ich mich mit der Powershell nie. Wenn ich Skripte unter Windows schreibe, dann für die ‘bash’ Shell unter Verwendung von cygwin. Aber ich komme vom Thema ab.

Windows Terminal

Das neue Angebot an die Windows Entwickler heißt Windows-Terminal. Die Applikation befindet sich in der Betaphase. Funktioniert allerdings zuverlässig: Windows Terminal Preview.

oh-my-zsh

Die heißeste Killer-Shell unter Linux ist momentan oh-my-zsh. Auch unter cygwin verfügbar. oh-my-zsh bietet neben den visuellen Eindrücken interessante Erweiterungen, die aus meiner Sicht, vor allem den Umgang mit GIT betreffen.

oh-my-posh / posh-git

Inspiriert von der oh-my-zsh Shell-Erweiterung, gibt es eine Variante für die Powershell. oh-my-posh bzw. posh-git.

oh-my-posh wird zusammen mit posh-git installiert. Bevor die Installation gestartet werden kann, muss vermutlich eine Sicherheitseinstellung der Powershell geändert werden. Dazu öffnet man als Administrator die Powershell und setzt den folgenden Befehl ab:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Danach wechselt man wieder in die ‘normale’ Powershell (ohne Admin-Rechte) und kann die folgenden Befehle ausführen:

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

Im Anschluss wird das ‘Theme’ gesetzt:

Set-Theme Agnoster

Das ist mein Favorit. Weitere Themes finden sich auf der Projektseite von oh-my-posh/themes.

Damit oh-my-posh bei jedem öffnen der Powershell gestartet wird, muss die Konfiguration angepasst werden.

notepad $PROFILE

und dort die Zeilen

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Agnoster

eintragen. Und falls ihr in ein GIT Verzeichnis wechselt, wird euch auffallen, dass einige GIT-Repo Informationen farblich dargstellt werden. Falls ihr nicht den passenden Zeichensatz installiert und ausgewählt habt, werden einige Zeichen falsch dargestellt, so wie bei mir. Im Anschluss installiert man sich den passenden Zeichensatz, ergänzt um die sogenannten ‘Powerline’ Symbole.

Powerline Fonts

Auf GitHub findet sich ein Powerline Repo. Das lokal auf die Platte clonen:

git clone https://github.com/powerline/fonts.git

und im Anschluss

cd fonts
.\install.ps1

starten und warten, bis alle Zeichensätze installiert sind. Oder man pickt sich nur die geneigten Zeichensätze heraus und installiert diese.

Zeichensatz einstellen

In der Powershell mit rechts klick auf die Titelzeile, Eigenschaften auswählen und dann auf den Reiter ‘Schriftart’ wechseln. Dort z.B. den Zeichensatz

"Noto Mono For Powerline"

auswählen. Im Windows Terminal geht man ebenfalls in die Titelzeile und klickt auf das Symbol rechts von ‘+’. Dort ‘Settings’ auswählen und notepad öffnet sich. Dort den Abschnitt ‘fontFace’ aus dem Beispiel kopieren und an gleicher Stelle einfügen.

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

    "profiles":
    [
        {
            // Make changes here to the powershell.exe profile
            "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
            "name": "Windows PowerShell",
            "commandline": "powershell.exe",
            "hidden": false,
            "fontFace": "Noto Mono For Powerline",
            "fontSize": 12
        },
        {
            // Make changes here to the cmd.exe profile
            "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
            "name": "cmd",
            "commandline": "cmd.exe",
            "hidden": false
        },
        {
            "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
            "hidden": false,
            "name": "Azure Cloud Shell",
            "source": "Windows.Terminal.Azure"
        }
    ],

    // Add custom color schemes to this array
    "schemes": [],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}

Fertig.

Powershell ohne Powerline

Links und Referenzen

AssertJ und java.util.List

AssertJ hat eine praktische Möglichkeit, Listen in JUnit Tests abzuprüfen. Insbesondere, wenn in der Liste komplexe Objekte abgelegt sind, s...