Glow Markdown in der Shell rendern

Markdown ist eine leicht verständliche Auszeichnungssprache für Texte. Einige von Euch kennen jene aus Readme-Dateien aus Git Repositories, Dokumentationen und von statischen Bloggeneratoren wie Hugo, oder Jekyll. Markdown bietet für mich entscheidende Vorteile.

Ein in Markdown formatierter und strukturierten Text ist für immer in der gewünschten Formatierung betrachtbar. Er ist nicht an ein bestimmtes Programm und seiner Syntax gebunden. Im Gegensatz dazu öffnen sich alte Dateien aus Officeanwendungen aus Redmond der 90er Jahre nur mit Verlusten in neueren Programmen, wobei bereits viel der Formatierung und dessen Struktur verloren geht. Besonders problematisch wird es, wenn Programme nicht mehr auf neuen Systemen laufen, oder wenn sie für eine Installation nicht mehr verfügbar sind. Hier drohen uns in Zukunft digitale Verluste.

Markdown überzeugt durch seine gute Lesbarkeit ohne Rendering, sowie durch die einfache Syntax bei der Erstellung von Texten, Tabellen und Listen. Markdown erlaubt es, Text mit einfachen Symbolen zu formatieren. So rahmen zwei ** einen fetten Text ein, während ein * kursiven Text markiert und eine H1-Überschrift ihre Formatierung durch eine Raute mit Leerzeichen vor dem Text erhält. Für Überschriften in unteren Ebenen verwendet man entsprechend zwei, drei oder vier Rauten. Weitere Informationen finden sich in dem Artikel auf Wikipedia. Ich selbst nutze für die einfach und schnelle Auszeichnung Typora unter Linux und macOS. Ich gebe auch zu, damit meine README.md gerne in Git zu gestalten. Typora erstellt mir auf Knopfdruck ein Inhaltsverzeichnis aus den Überschriften inklusive Anker 😉

Während Markdown-Dateien in dafür bestimmten Texteditoren, wie z.b. dem oben genannte Typora, gut formatiert lesbar sind, benötigen Markdown-Dateien zum Rendern in der Shell eine spezielle Software, um eine perfekte Darstellung zu bekommen. Hier kommt Glow ins Spiel.

Was ist Glow?

Kurz und knapp: Glow ist ein auf ein der Programmiersprache Go basierendes Shellprogramm, welches Markdown-Dateien direkt in der Shell rendert. Es stellt die Inhalte übersichtlich formatiert, inklusive Links, und farbig dar.

Je nach System wird Glow über die Paketmanager der Linuxdistribution installiert. Glow lässt unter Debian, macOS ( via brew), FreeBSD, Fedora und sogar Android installieren. Natürlich besteht auch die Möglichkeit, glow über die Sprache go selbst zu installieren.

Nutzung

Glow kann mit einer lokalen Markdown-Datei aufgerufen werden:

glow README.md

Auch eine Vorschau von Markdown-Dokumenten aus dem Internet wäre möglich:

glow https://raw.githubusercontent.com/charmbracelet/glow/refs/heads/master/README.md

Des Weiteren bietet glow noch einen Pager und die Möglichkeit eigene Styles zu definieren und herunterzuladen.

Glow ist Teil des Charmprojektes welches eine Sammlung von Open-Source-Tools/-Bibliotheken für die Entwicklung von terminalbasierten Anwendungen ist. Das Charmprojekt ist die Glamourecke der modernen und benutzerfreundliche CLI-Programme 😉

Big Sur Homebrew xcrun: error: invalid active developer path

Bei meinem letzten Update von Homebrew unter macOS Big Sur hatte ich die Fehlermeldung, dass es eine ungültigen Pfadangabe für die Entwicklerwerkzeuge gäbe. Da ich nur die Kommandozeilenwerkzeuge für macOS nutze wird diese nicht einem Update unterzogen.
Bei einer kompletten Installation von Xcode würde dies automatisch geschehen.

Um das Update selbst anzustoßen genügt ein:

➜  ~ xcode-select --install

Shell Helligkeit des externen Monitors steuern

Aufstehen, die gut versteckten Taster suchen, Einstellen, hinsetzen. Das gilt auch für meinen externen Monitor, welchen ich öfters wegen der Sonneneinstrahlung anpassen muss.

Hier hilft mir xrandr in der Shell. Zuerst muss ich den richtigen angeschlossen Monitor finden und kann dann über Parameter die gewünschte Helligkeit einstellen. Bei Nutzung als Tastaturkürzel in TilingWMs eine große Hilfe.

⏚ [ChristianGrube:~] $ xrandr -q|grep "HDMI"

HDMI-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 510mm x 287mm
HDMI-2 disconnected (normal left inverted right x axis y axis)
HDMI-3 disconnected (normal left inverted right x axis y axis)

⏚ [ChristianGrube:~] $ xrandr --output HDMI-1 --brightness 1.2

Die augenschonende Schriftart für das Arbeiten mit Code und Shell

Typeface Name: Hack

Meine Empfehlung für das kommende Jahr doch einmal die Schriftart zu ändern und eine neue für die Konsole und das Programmieren zu nutzen. Die Schriftart Hack lässt sich in jeder Größe sehr leicht lesen.
Ein Blick auf die Proben sollte überzeugen.

Sie ist bei jeder größeren Linuxdistribution in den Repositories zu finden, lässt sich aber auch Systemen wie MacOs und Windows nachinstallieren. Ich nutze sie schon länger auf Grund der schnell zu erfassenden Gestaltung und damit einhergehender Augenfreundlichkeit.

macOS: SSH Hosts mit Autovervollständigung aufrufen

Es gibt unter macOS Mojave keine Autovervollständigung der definierten Hosts aus der Datei ~/.ssh/config. Hierzu habe ich in die Datei ~/.bash_profile folgende Funktion eingetragen :

function __completeSSHHosts {
	COMPREPLY=()
	local currentWord=${COMP_WORDS[COMP_CWORD]}
	local completeHosts=$(
		cat "$HOME/.ssh/config" | \
			grep --extended-regexp "^Host +([^* ]+ +)*[^* ]+ *$" | \
			tr -s " " | \
			sed -E "s/^Host +//"
	)

	COMPREPLY=($(compgen -W "$completeHosts" -- "$currentWord"))
	return 0
}

complete -F __completeSSHHosts ssh

Nun reicht wieder ein ssh TAB in der Konsole um die einzelnen Hosts und der damit verbundenen Konfiguration aufzurufen.

What is my IP für die Shell

Unter der Adresse https://ifconfig.co/ gibt es einen Dienst, welcher die öffentliche Adresse des genutzten Clients ausgibt. ifconfig.co lässt sich sehr gut in eigene Scripte durch die Unterstützung von curl, httpie, GNU Wget und fetch einbinden.

Ausgegeben werden hier nicht nur die IP-Adresse (Oktett, Dezimal), sondern auf Wunsch auch noch der Standort (ISO,Stadt, Land, GPS-Koordinaten) und die Erreichbarkeit von Ports ausgegeben.

Es ist möglich die Webanwendung auf einem eigene Host zu installieren, die Quellen liegen in einem öffentlichen Repository auf Github.

Kopieren und verschieben mit Fortschrittsanzeige in einem Terminal

Folgenden Aliaseintrag in die Datei ~/.bashrc bzw die eingebundene Aliasdatei einfügen:

alias rsyncp="rsync --partial --progress --append --rsh=ssh -r -h -z"
alias rsyncmv="rsync --partial --progress --append --rsh=ssh -r -h -z--remove-sent-files"

Legende

Wir missbrauchen hier das Programm rsync:

  • –partial Teilweise übertragene Daten behalten
  • –progress Detailierte Informationen über den Ablauf ausgeben
  • –append nicht vollständig übertragene Daten wieder aufnehmen.
  • Remoteshellprogramm ist ssh und kein TCP-Daemon
  • -r rekursives Übertragen der Daten
  • -h human readable
  • -z Daten bei der Übertragung komprimieren. Wäre nur sinnvoll bei einer SSH-Verbindung. Da ich den Befehl für lokale und entfernte Übertragungen nutze habe ich den Parameter doch mit eingepflegt.
  • –remove-sent-files übertragene Daten löschen. Dies kommt nur bei dem Befehl für das verschieben zum tragen