Themes für Visual Studio Code an Systemvorgabe anpassen

Mittlerweile unterstützen viele Betriebssysteme einen Dark-Modus, in welchem das System ein dunkles Theme wählt, mit welchem der Nutzer in den dunklen Stunden nicht geblendet werden soll. Auch die automatische Umstellung, je nach Tageszeit, ist in den meisten Betriebssystemen, wie z.B. macOS einstellbar. Die entsprechenden Apps können dann auf diese Systemvorgabe reagieren. Der freie Codeeditor Visual Studio Code, ist standardmäßig mit einem dunklen Theme konfiguriert.

Die entsprechende Einstellung im Editor

Allerdings unterstützt Visual Studio Code auch die automatische Auswahl des Themes auf Basis der Systemvorgabe. Dazu muss in den Einstellungen nach dem Wert:

window.autoDetectColorScheme

gesucht werden und dieser gesetzt werden. Anschließend wählt Visual Studio Code das passende helle oder dunkle Theme anhand der Systemvorgabe. Wem die Standardthemes nicht zusagen, der kann über die Parameter workbench.preferredLightColorTheme und workbench.preferredDarkColorTheme in den Einstellungen die entsprechenden Themes setzen.

Automatisches Entsperren eines Macs mit der Apple Watch

Seit macOS High Sierra ist es möglich den eigenen Mac mit der Apple Watch zu entsperren, wenn einige Systemvoraussetzungen erfüllt sind. Ist dies gegeben kann die Entsperrung über die Apple Watch in den Einstellungen von macOS aktiviert werden.

Dazu muss die Seite Sicherheit und dort die Unterseite Allgemein aufgerufen werden. Dort findet sich der Punkt Mit deiner Apple Watch Apps und deinen Mac entsperren. Ist dieser aktiviert, so entsperrt sich das System automatisch, wenn der Nutzer mit der entsprechenden Apple Watch vor dem Gerät sitzt.

In den Sicherheitseinstellungen kann die Entsperrung über die Apple Watch aktiviert werden

Dabei muss die Apple Watch sich nah am Gerät befinden. Außerdem muss sie entsperrt sein und darf sich nicht im Schlafmodus befinden. In solchen Fällen muss das Passwort normal eingeben werden. Auch beim Hochfahren und dem ersten Login muss das Passwort eingegeben werden. Nicht nur macOS lässt sich dann entsperren, sondern auch entsprechende Apps oder die Freischaltung von Administrator-Rechten. In einem solchen Fall muss die Freigabe auf der Apple Watch über die Seitentaste genehmigt werden. Auch beim automatischen entsperren, erhält der Nutzer eine Benachrichtigung auf seiner Apple Watch.

Minecraft-Bahnhof mit automatischer Fortsetzung der Fahrt

Für ein U-Bahn-System welches ich auf meinem Minecraft-Server bauen wollte, war ich auf der Suche nach einem System um in einen Bahnhof einzufahren und nach einer gewissen Wartezeit wieder in die Richtung Fahrrichtung zu fahren, falls der Spieler nicht vorher aus der Lore aussteigt.

Das System von oben

Herausgekommen ist ein System, bei welchem der Zug einfährt und ein Redstone-Signal mit einer Aktivierungsschiene auslöst. Dieses Signal aktiviert eine Trichter-Clock. Über die Größe der Trichter-Clock kann die Zeitdauer des Stopps auf dem Bahnhof bestimmt werden. Sobald die Trichter-Clock einmal im Kreis gelaufen ist, löst sie ein Signal aus und schießt den Zug ab. Damit das Signal lang genug ist, wird eine Schaltung zur Verlängerung des Signals genutzt. Ansonsten würde der Zug während der Anfahrt stecken bleiben.

Die Signalverlängerung

Das Problem, das der Zug in die richtige Richtung fährt, wurde dadurch gelöst das er vor dem Stopp eine Erhöhung befahren muss und in der Erhöhung zum Stehen kommt. Bekommen die Schienen wieder das Redstone-Signal erledigt die Schwerkraft den Rest. Damit sind manuelle Abschüsse ebenfalls möglich.

Quelltext im Visual Studio automatisch formatieren

Das Visual Studio formatiert den Quellcode automatisch nach den eingestellten Richtlinien. Wenn man nun aber die Richtlinien ändert, steht man vor dem Problem, das der Quelltext noch nach den alten Richtlinien formatiert ist.

Die Formatierungseinstellungen im Visual Studio

Die Formatierungseinstellungen im Visual Studio

Leider gibt es keine direkte Option im Visual Studio um den bestehenden Quelltext am Stück neu zu formatieren. Allerdings kommt man mit einem kleinen Makro (abgeleitet vom VS Formater Macro) an dieser Stelle weiter. Dazu wird im Visual Studio die Package Manager Console (zu finden unter Tools -> NuGet Package Manager -> Package Manager Console) geöffnet und dort folgendes eingegeben:

function f($projectItems) { $projectItems | ? { $_.Name -ne $null -and $_.Name.EndsWith( ".cs" ) -and -not $_.Name.EndsWith( ".Designer.cs" ) } | % { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}') ; $win.Activate() ; $DTE.ExecuteCommand('Edit.FormatDocument') } ; if ($projectItems) { $projectItems | % { f($_.projectItems) } } }
 
$dte.Solution.Projects | % { f($_.ProjectItems) }

Das Visual Studio öffnet nun alle *.cs Dateien in der geöffneten Solution und formatiert die Quelltexte neu. Dieser Vorgang ist dabei relativ langsam und führt bei größeren Projekten dazu das das Visual Studio einfriert. Auf Stack Overflow gibt es eine elegantere Lösung:

function FormatItems($projectItems) {
    $projectItems |
    % {
        # Write-Host "    Examining item: $($_.Name)";

        if ($_.Name -and $_.Name.ToLower().EndsWith(".cs") `
            -and (-not $_.Name.ToLower().Contains(".designer."))) {

            $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}');
            $win.Activate();

            $dte.ExecuteCommand('Edit.FormatDocument');

            if (!$_.Saved) {
                Write-Host "    Saving modified file: $($_.Name)";
                $dte.ExecuteCommand('File.SaveSelectedItems');
            }

            $dte.ExecuteCommand('Window.CloseDocumentWindow');
        }

        if ($_.ProjectItems -and ($_.ProjectItems.Count -gt 0)) {
            # Write-Host "    Opening sub-items of $($_.Name)";

            FormatItems($_.ProjectItems);
        }
    };
}

$dte.Solution.Projects | % {
    Write-Host "-- Project: $($_.Name)";

    FormatItems($_.ProjectItems)
}
;

Bei dieser Lösung wird jede Datei nach der Neuformatierung, gespeichert und wieder geschlossen. Leider wird auch diese Lösung von Datei zu Datei langsamer, so das sie für größere Projekte wiederrum unbrauchbar ist. Mit der Extension Format Document gibt es eine Lösung welche schnell genug ist, allerdings funktioniert diese nur unter Visual Studio 2010. Nach einigen Anpassungen habe ich eine Version gebaut, welche auch unter Visual Studio 2012 und 2013 läuft. Das Problem an dieser Variante ist, das Dateien in Ordnern nur berücksichtigt werden wenn der Ordner im Solution Explorer geöffnet ist. Alles in allem ist keine der vorgestellten Lösungen wirklich optimal, allerdings kann man viele Fälle mit den vorgestellten Lösungen lösen.

Smart in Parkposition bringen

Einen Smart in Parkposition zu bringen ist ein interessantes Unterfangen. Normalerweise stellt man das Auto ab und zieht die Handbremse an. Das ist im Winter allerdings mit Vorsicht zu genießen, da es unter Umstände passieren kann das die Bremse in diesem Fall festfriert und sich das Auto dann gar nicht mehr bewegt.

Die Schaltungsgestaltung in einem Smart

Die Schaltungsgestaltung in einem Smart

Wie parkt man also in diesem Fall? Da der Smart ein automatisiertes Schaltgetriebe hat, kann man nicht einfach einen Gang einlegen. Der Schlüssel lässt sich in der Stellung „A“ nicht entfernen. Auch eine Parkposition („P“) ist nicht vorhanden. Aber auch für diesen Fall gibt es eine Lösung. So reicht es einfach in den Rückwärtsgang („R“) zu schalten und anschließend den Schlüssel zu ziehen. Schon ist der Smart aus und ein Gang eingelegt, welcher das wegrollen verhindert.