Window Layouts mit Slate steuern

slate_icon

Der Nerd-Alarm wurde bereits gesetzt. Trotzdem komme ich nicht umhin und muss die Schräubchen noch etwas höher drehen.

Auf Twitter habe ich bereits mein Problem geschildert:

Ich nutze mein MacBook Air mobil und fahre natürlich die normale Auflösung von 1440×900 Pixeln. Zuhause stecke ich jedoch ein 24″ Display 27″ Display an, welches eine Auflösung von 1920×1080 Pixeln 2560×1440 Pixeln aufweist. Hier kann ich mich mit den Programmen naturgemäß mehr ausbreiten und ich ordne meine Fenster schön an. Jedes mal wenn ich aber das Display abziehe und in die Schule gehe habe ich das selbe Schlamassel:
Auf dem Air sind die Fenster wieder wild durcheinander und ich darf dann wieder alles neu anordnen. In der Schule… und dann zuhause auf dem großen Display nochmal.
Warum Mac OS X hier keine native Unterstützung bietet ist mir ein Rätsel.

Also habe ich mich etwas reingenerdet, und zwar in einen Window Manager, der auf den schönen Namen Slate hört.

Slate zu beschreiben ist vielleicht nicht ganz leicht. Er zählt auf alle Fälle zu den tastaturgesteuerten Window Managern, was ihn für mich so attraktiv macht, da ich gerne die Maus bzw. das Trackpad meide.
Gleichzeitig bietet er schier unendliche Konfigurationsmöglichkeiten, was der Tatsache geschuldet ist, dass er komplett über eine Textdatei konfiguriert wird1.

Ich möchte an dieser Stelle nicht zu sehr ausschweifen und einfach mal meine Konfigurationsdatei präsentieren, um dann kurz zu beschreiben, welche Ziele ich damit verfolge.

Hier ist die Datei .slate:

config defaultToCurrentScreen true
config windowHintsShowIcons true
config windowHintsIgnoreHiddenWindows false
config windowHintsSpread true
config nudgePercentOf screenSize
config resizePercentOf screenSize

alias hyper ctrl;alt;cmd
alias browser 'Safari'
alias mail 'MailMate'
alias terminal 'iTerm'

alias full move screenOriginX;screenOriginY screenSizeX;screenSizeY
alias lefthalf move screenOriginX;screenOriginY screenSizeX/2;screenSizeY
alias righthalf move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY
alias rightmost move screenOriginX+screenSizeX*0.2;screenOriginY screenSizeX*0.8;screenSizeY
alias rightless move screenOriginX+screenSizeX*0.8;screenOriginY screenSizeX*0.2;screenSizeY
alias leftmost move screenOriginX;screenOriginY screenSizeX*0.8;screenSizeY
alias leftless move screenOriginX;screenOriginY screenSizeX*0.2;screenSizeY

layout bigscreen 'Tweetbot':REPEAT ${leftless}
layout bigscreen ${browser}:REPEAT ${rightmost}
layout bigscreen 'MailMate':REPEAT ${rightmost}
layout bigscreen 'DEVONthink Pro Office':REPEAT ${rightmost}
layout bigscreen 'OmniFocus':REPEAT ${rightmost}
layout bigscreen 'FoldingText':REPEAT ${rightmost}
layout bigscreen 'Ulysses':REPEAT ${rightmost}
layout bigscreen 'ReadKit':REPEAT ${rightmost}
layout bigscreen 'iTerm':REPEAT ${lefthalf}

layout smallscreen 'Tweetbot':REPEAT ${leftless}
layout smallscreen ${browser}:REPEAT ${full}
layout smallscreen 'MailMate':REPEAT ${full}
layout smallscreen 'DEVONthink Pro Office':REPEAT ${full}
layout smallscreen 'OmniFocus':REPEAT ${full}
layout smallscreen 'FoldingText':REPEAT ${full}
layout smallscreen 'Ulysses':REPEAT ${full}
layout smallscreen 'ReadKit':REPEAT ${full}
layout smallscreen 'iTerm':REPEAT ${lefthalf}

default bigscreen resolutions:1920x1080
default smallscreen resolutions:1440x900

bind k:${hyper} ${full}
bind j:${hyper} undo
bind h:${hyper} ${lefthalf}
bind l:${hyper} ${righthalf}
bind u:${hyper} ${leftmost}
bind i:${hyper} ${leftless}
bind o:${hyper} ${rightless}
bind p:${hyper} ${rightmost}
bind 0:${hyper} layout bigscreen
bind 9:${hyper} layout smallscreen
bind b:${hyper} focus ${browser}
bind m:${hyper} focus ${mail}
bind t:${hyper} focus ${terminal}
bind e:${hyper} hint ASDFGHJKLQWERTZUIP
bind right:${hyper} focus right
bind left:${hyper} focus left
bind up:${hyper} focus up
bind down:${hyper} focus down

Was habe ich mir hier also konfiguriert?

Zunächst einmal ein Kommando-Kürzel, mit dem ich alle weiteren Befehle an Slate übergebe. Ich habe mich hier für ⌃+⌥+⌘ entschieden, da es standardmäßig unter OS X nicht verwendet wird.

Getreu Vim habe ich mir dann die Tasten h, j, k, l folgendermaßen reserviert:

  • ⌃+⌥+⌘+k maximiert ein Fenster auf die maximale Breite des Displays
  • ⌃+⌥+⌘+h schiebt ein Fenster auf die linke Hälfte des Displays
  • ⌃+⌥+⌘+l schiebt ein Fester auf die rechte Hälfte des Displays
  • ⌃+⌥+⌘+j ist ein Undo, macht also eine Veränderung am Fenster wieder rückgängig

Zusätzlich habe ich mir Shortcuts für meine wichtigsten Programme definiert:

  • ⌃+⌥+⌘+b wählt meinen Browser aus
  • ⌃+⌥+⌘+m wählt mein Mail-Programm aus
  • ⌃+⌥+⌘+t wählt mein Terminal aus

Außerdem habe ich mir ⌃+⌥+⌘+e als schnellere Alternative für die Auswahl sämtlicher offener Programme konfiguriert.

Schön finde ich auch die Tatsache, dass ich mit meinem Kommando-Kürzel und den Cursortasten schnell den Fokus auf offene Fenster richten kann.

Aber worum ging es eigentlich bei meinem ursprünglichen Problem? Genau, es ging mir um die Anordnung und Beibehaltung verschiedener Fensterlayouts beim Wechsel vom externen Display auf das Display des MacBook Air.

Und hier spielt Slate seine ganze Kraft aus! Mittels layout-Anweisungen können hier für verschiedene Auflösungen unterschiedliche Layouts konfiguriert werden, die dann – aufgepasst – automatisch beim An- und Abstecken aktiviert werden!

Kurzum, ich bin mehr als begeistert! Die Einarbeitung in die Konfiguration hat etwa einen Nachmittag gedauert, sich aber voll gelohnt.

Die Datei zur Konfiguration kann auch als Gist heruntergeladen werden.


  1. Siehe oben bereits angeführter Nerd-Alarm!