[PYTHON] Lassen Sie uns das Farbschema von iTerm2 je nach Tageszeit automatisch ändern

Möchten Sie Ihre Stimmung mit einem hellen Thema am Tag und einem dunklen Thema am Abend auffrischen, da Sie es leid sind, ständig auf das Terminalbildschirm mit demselben Farbschema zu schauen? Es ist jedoch mühsam, die Themen jeden Morgen und Abend manuell zu wechseln. Lassen Sie Python dies tun.

Python API Ab iTerm2 Version 3.3.0, die im Juli 2019 veröffentlicht wurde, ist die Python-API verfügbar (Gibt es vorher eine API namens AppleScript?). Sie können die API auch von außerhalb von iTerm2 aufrufen, indem Sie "pip install iterm2" ausführen.

Um die API zu verwenden, aktivieren Sie ** Python-API aktivieren ** unter ** Einstellungen> Allgemein> Magie **. Screen Shot 2020-03-31 at 20.42.58.png

Wenn Sie Ihr eigenes Skript vorbereiten möchten, wählen Sie ** Skripte> Verwalten> Neues Python-Skript **. Eine Anleitung wird angezeigt und eine Vorlage für Sie erstellt. Der erstellte Python-Code wird in "~ / Library / Application Support / iTerm2 / Scripts" gespeichert. Wenn Sie jedoch möchten, dass er beim Start der App automatisch geladen wird, klicken Sie auf den Ordner "AutoLaunch" unter den oben genannten "Scripts" Und dort aufbewahren.

Tatsächlich muss das automatische Skript zum Umschalten des Farbschemas nicht vollständig zerkratzt werden, und die offiziellen Beispielskripte sind fast vollständig. Es gibt.

Im ursprünglichen Beispielcode musste iTerm2 beim Umschalten des Farbschemas gestartet werden, daher wurde es so geändert, dass beim Starten der Anwendung mit Bezug auf die aktuelle Uhrzeit umgeschaltet wird. Speichern Sie den folgenden Code als "~ / Library / Application Support / iTerm2 / Scripts / AutoLaunch / change_color.py".

change_color.py


#!/usr/bin/env python3.7

import asyncio
import datetime
import iterm2

# Clock time to change colors.
LIGHT_TIME = (7, 0)
DARK_TIME = (17, 0)

# Color presets to use
LIGHT_PRESET_NAME = "material"
DARK_PRESET_NAME = "onedark"

# Profiles to update
PROFILES = ["Default"]

def get_datetime(t, time):
    return datetime.datetime(t.year, t.month, t.day, time[0], time[1])

def datetime_after(t, time):
    today = get_datetime(t, time)
    if today > t:
        return today
    # Same time tomorrow
    return today + datetime.timedelta(1)


def next_deadline_after(t):
    light_deadline = datetime_after(t, LIGHT_TIME)
    dark_deadline = datetime_after(t, DARK_TIME)
    if light_deadline < dark_deadline:
        return (LIGHT_PRESET_NAME, light_deadline)
    return (DARK_PRESET_NAME, dark_deadline)


def get_duration():
    now = datetime.datetime.now()
    preset_name, deadline = next_deadline_after(now)
    duration = (deadline - now).seconds
    print("Sleep for {} seconds until {}".format(duration, deadline))
    return duration, preset_name


async def set_colors(connection, preset_name):
    print("Change to preset {}".format(preset_name))
    preset = await iterm2.ColorPreset.async_get(connection, preset_name)
    for partial in (await iterm2.PartialProfile.async_query(connection)):
        if partial.name in PROFILES:
            await partial.async_set_color_preset(preset)


async def main(connection):
    now = datetime.datetime.now()
    begin = get_datetime(now, LIGHT_TIME)
    end = get_datetime(now, DARK_TIME)
    if (now > begin and now < end):
        await set_colors(connection, LIGHT_PRESET_NAME)
    else:
        await set_colors(connection, DARK_PRESET_NAME)
    while True:
        duration, preset_name = get_duration()
        await asyncio.sleep(duration)
        await set_colors(connection, preset_name)
        await asyncio.sleep(1)


iterm2.run_forever(main)

Zuerst 5 Konstanten definiert

--LIGHT_TIME = (7, 0) : Zeit zum Umschalten auf das Lichtthema (HH, MM) --DARK_TIME = (16, 0) : Zeit, zum dunklen Thema zu wechseln (HH, MM) --LIGHT_PRESET_NAME = "..." : Name des Lichtthemas (Standardthema ist Lichthintergrund) --DARK_PRESET_NAME = "..." : Dunkler Themenname (Standardthema ist Dunkler Hintergrund) --PROFILES = ["..."] : Profilname zum Ändern des Themas (Mehrfachauswahl zulässig)

Bitte ändern Sie nach Ihren Wünschen. Wählen Sie den Profilnamen aus der von Ihnen erstellten Profilliste aus und wählen Sie den Namen der Themenvoreinstellung im Menü ** Farbvoreinstellungen ... ** unten rechts aus. Screen Shot 2020-03-31 at 21.26.20.png

Übrigens werden Fehler wie die Standardausgabe von "print (...)" oder die Angabe eines nicht vorhandenen voreingestellten Namens an ** Scripts> Manage> Console ** ausgegeben. ![Screenshot 2020-03-31 um 22.28.30-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274429/86fa67b6-3702-ebcc -8a86-ddd50ad7a7aa.png)

Psycho, Python das langweilige Ding machen zu lassen ~ ~ ~ ~ ~

Referenz

ITerm2 hat eine Statusleiste

Recommended Posts

Lassen Sie uns das Farbschema von iTerm2 je nach Tageszeit automatisch ändern
Lassen Sie uns den Befehl pünktlich mit dem Bot der Zwietracht ausführen
Ändern Sie die Reihenfolge von PostgreSQL in Heroku
[Linux] Unterschied in den Zeitinformationen in Abhängigkeit von der Uhr-ID der Funktion clock_gettime ()
Lassen Sie uns automatisch den Text des Songs anzeigen, der in Python in iTunes abgespielt wird
Ändern Sie in Python das Verhalten der Methode je nach Aufruf
Ändern Sie die Farbe von Fabric-Fehlern und Warnungen
Stellen Sie die Farbe auf der Posterseite so ein, dass sich die Farbe des Youtube-Untertitels automatisch ändert.
Zum Zeitpunkt des Python-Updates mit Ubuntu
Ändern Sie die Auflösung von Ubuntu, das auf VirtualBox ausgeführt wird
Ändern Sie die Zeitzone in Oracle Database Docker
Unterschied in den Ergebnissen abhängig vom Argument von multiprocess.Process
[Python] Lassen Sie uns die URL der Django-Administrator-Site ändern
Lassen Sie uns automatisch den Text des Songs anzeigen, der in iTunes in Python abgespielt wird (verbesserte Version).
Der Rückgabewert von len oder unichr kann sich ändern, je nachdem, ob es sich um UCS-2 oder UCS-4 handelt.
Quellcode von "Stellen Sie die Farbe auf der Posterseite so ein, dass sich die Farbe der Youtube-Untertitel automatisch ändert."
Ändern Sie das Thema von Jupyter
Ändern Sie den Stil von matplotlib
So ändern Sie die Farbe nur der mit Tkinter gedrückten Taste
Messen Sie die Testabdeckung von Push-Python-Code auf GitHub.
Unter Linux ist der Zeitstempel einer Datei etwas vorbei.
Django: Variiert die Anzahl der untergeordneten Formulare in Abhängigkeit von der Anzahl der Eingabeelemente