Editor und Shell mit Powerline

Vor ein paar Wochen bin ich über die von MadMalik erstellte Font “monoOne” gestolpert. Für den täglichen Einsatz in der Shell und im Editor habe ich recht hohe Ansprüche an eine Font. Dazu zählen:

  • Fixed Width, also dass alle Zeichen immer dieselbe Breite haben; hierdurch fallen alle Fonts mit variabler Zeichenbreite und Kerning raus
  • Klare Unterscheidbarkeit der einzelnen Zeichen, was insbesondere für “l”, “I”, “1”, “!” und “|” gilt, aber auch für “O” und “0”
  • Die Font soll nicht all zu groß eingestellt werden müssen, um die Unterscheidbarkeit zu gewährleisten
  • In der kleinen Größe sollen auch fontspezifische Eigenschaften, wie Serifen, erkennbar sein oder allein die Richtung von “ordentlichen” Anführungszeichen
  • Die gängigen Umlaute und diverse Symbole insbesondere für einfache mathematische Darstellungen sollen vorhanden sein

Mit der monoOne hat MadMalik eine Font geschaffen, die mir sehr gut gefällt. Im Büro sprachen mich Kollegen an, welche Font ich nutzen würde, da sie neben der fast schon einheitlichen Menlo positiv heraussticht.

In der Beschreibung zur monoOne las ich, dass diese die powerline Symbole beinhaltet, von denen ich bisher noch nie hörte.

powerline

Die powerline Symbole sind eigentlich nur sieben Zeichen, die im erweiterten Unicode-Bereich abgelegt werden. Zusammen mit anderen bereits vorhandenen Unicode-Zeichen können sie über Plugins in Editors und Shells geladen werden, um visuell erweiterte Informationen zum Zustand der editierten Datei oder dem System zu geben.

Konkret sieht es dann beispielsweise beim Editor vim so aus, dass die Statuszeile um einige Informationen aufgewertet wird (das Bild ist vom powerline Autor übernommen und zeigt die Font Pragmata Pro):

Es zeigt, dass ich mich im Normal-Modus vom vim befinde. Rechts daneben wird mit einem Symbol der aktuell verwendete Branch im git Repository angezeigt, erst dann der Dateiname. Auf der rechten Seite sind Informationen über das Dateiformat (unix), das Encoding (utf-8), das eingestellte Syntax-Highlightning (python), der aktuellen Cursorposition relativ zum Gesamtdokument (2%), Linebreak, Zeilen- und Spaltenposition.

Beim Wechsel des Editor-Modus schaltet sich die Zeile um:



Allein diese massive visuelle Änderung hilft ungemein, schnell Informationen über den Zustand des Editors und der Datei zu erfahren.

Shell

In der Dokumentation zur powerline steht, dass diese auch für andere Applikationen verfügbar ist. Das geht zwar eigentlich auch mit den für vim installierten powerline-Tools, aber irgendwie wollte das auf meinem Mac nicht wirklich zusammenarbeiten. Stattdessen gab es irgendwo den Hinweis, es gebe ein zshTheme für powerline.

Der Entwickler nutzt dazu das Framework oh-my-zsh. Seit Jahren nutze ich die hoch konfigurierbare zsh. Anfangs mit vielen eigenen Snippets, die ich mir im Web zusammensuchte oder mit anderen Bekannten im Hackspace austauschte. Später dann baute ich meine zsh-Config auf die vom Projekt grml auf.

Das Framework oh-my-zsh setzt auf eine schnelle Konfiguration der zsh, was vermutlich viele bisher abschreckte, auf diese Shell zu wechseln. Ohne Konfigurationsdatei ~/.zshrc zeigt die zsh keinen Prompt sondern einen minimalen Konfigurationsdialog. Die danach angezeigte Shell ist extrem Minimal. Die großen Stärken von zsh kommen einfach nicht hervor. Bei oh-my-zsh braucht nur das Repository von github gecloned und eine ~/.zshrc angelegt werden, die im Grunde nicht mehr als zwei Zeilen beinhaltet, um oh-my-zsh zu aktivieren. Weiterhin können in der eigenen ~/.zshrc Plugins oder Themes aktiviert werden.

Bei mir sieht die ~/.zshrc so aus:

ZSH=$HOME/.oh-my-zsh
ZSH_THEME="powerline"
COMPLETION_WAITING_DOTS="true"
POWERLINE_RIGHT_A="exit-status"
POWERLINE_NO_BLANK_LINE="true"
plugins=(git brew github osx python screen ssh-agent mosh terminalapp)
source $ZSH/oh-my-zsh.sh

Das Ergebnis sieht dann zusammen mit der monoOne so aus:

Screen Shot 2013-11-03 at 14.56.50

 

In der linken Infobox habe ich meinen Usernamen, den Host, dann den Pfad und noch ähnlich wie beim vim-Plugin die Information über das git-repository und den Status der Dateien. Die rechte Infobox mit der Uhrzeit und dem Return-Code verschwindet, wenn der eingetippte Befehl länger als die Lücke zwischen den Boxen ist.

Community-Configs

Vor allem oh-my-zsh machte mir bewusst, wie stark der Einfluss von github auf den Austausch von Konfigurationsdateien ist. Obwohl es vorher viele andere Projekte gab, bei denen mitgewirkt werden konnte, ist es bei github viel einfacher. Es kann schnell ein Fork erstellt werden, um die eigene Konfiguration anzupassen und zu erweitern. Und wenn alles schön aussieht, kann diese Konfiguration auch wieder hoch geladen werden – oder ein Pull-Request geschickt werden, um die Erweiterung im Hauptprojekt aufzunehmen.