[PYTHON] Modifions automatiquement la palette de couleurs d'iTerm2 en fonction de l'heure de la journée

Fatigué de regarder l'écran du terminal avec la même palette de couleurs tout le temps, voulez-vous rafraîchir votre humeur avec un thème clair pendant la journée et un thème sombre le soir? Cependant, il est difficile de changer manuellement de thème chaque matin et chaque soir, alors laissez Python le faire.

Python API À partir de la version 3.3.0 d'iTerm2 publiée en juillet 2019, l'API Python est disponible (existe-t-il une API appelée AppleScript avant cela?). Vous pouvez également accéder à l'API depuis l'extérieur d'iTerm2 en faisant pip install iterm2.

Pour utiliser l'API, cochez ** Activer l'API Python ** dans ** Préférences> Général> Magic **. Screen Shot 2020-03-31 at 20.42.58.png

Si vous souhaitez préparer votre propre script, sélectionnez ** Scripts> Gérer> Nouveau script Python ** et un guide sortira pour créer un modèle pour vous. Le code Python créé est enregistré dans ~ / Library / Application Support / iTerm2 / Scripts, mais si vous voulez qu'il soit chargé automatiquement au lancement de l'application, le dossier ʻAutoLaunch sous les Scripts` ci-dessus Et stockez-le là-bas.

En fait, le script de changement de schéma de couleurs automatique n'a pas besoin d'être complètement effacé, et les [Exemples de scripts] officiels (https://www.iterm2.com/python-api/examples/index.html) sont presque terminés. Il y a.

Dans l'exemple de code d'origine, iTerm2 devait être démarré lors du changement de jeu de couleurs, il a donc été modifié afin qu'il basculera en référence à l'heure actuelle lors du démarrage de l'application. Enregistrez le code suivant sous ~ / 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)

Première définition de 5 constantes

--LIGHT_TIME = (7, 0) : Il est temps de passer au thème clair (HH, MM) --DARK_TIME = (16, 0) : Il est temps de passer au thème sombre (HH, MM) --LIGHT_PRESET_NAME = "..." : Nom du thème clair (le thème par défaut est Fond clair) --DARK_PRESET_NAME = "..." : Nom du thème sombre (le thème par défaut est Fond sombre) --PROFILES = ["..."] : Nom du profil pour changer le thème (plusieurs sélections sont autorisées)

Veuillez changer à votre goût. Sélectionnez le nom du profil dans la liste des profils que vous avez créée, puis sélectionnez le nom du thème prédéfini dans le menu ** Color Presets ... ** en bas à droite. Screen Shot 2020-03-31 at 21.26.20.png

À propos, des erreurs telles que la sortie standard de print (...) ou lorsque vous spécifiez un nom prédéfini qui n'existe pas seront affichées dans ** Scripts> Gérer> Console **. ![Capture d'écran 2020-03-31 à 22.28.30-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274429/86fa67b6-3702-ebcc -8a86-ddd50ad7a7aa.png)

Psycho pour laisser Python faire la chose ennuyeuse ~ ~ ~ ~ ~

référence

ITerm2 a une barre d'état

Recommended Posts

Modifions automatiquement la palette de couleurs d'iTerm2 en fonction de l'heure de la journée
Exécutons la commande à temps avec le bot discord
Changer l'ordre de PostgreSQL dans Heroku
[Linux] Différence d'informations temporelles en fonction de l'ID d'horloge de la fonction clock_gettime ()
Affiche automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python
En Python, changez le comportement de la méthode en fonction de la façon dont elle est appelée
Changer la couleur des erreurs et avertissements Fabric
Réglez la couleur du côté de l'affiche pour que la couleur du sous-titre Youtube change automatiquement.
Au moment de la mise à jour de python avec ubuntu
Changer la résolution d'Ubuntu s'exécutant sur VirtualBox
Modifier le fuseau horaire dans Oracle Database Docker
Différence de résultats en fonction de l'argument du multiprocessus.
[Python] Changeons l'URL du site administrateur de Django
Affiche automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python (version améliorée)
La valeur de retour de len ou unichr peut changer selon qu'il s'agit de UCS-2 ou UCS-4.
Code source de "Réglez la couleur du côté de l'affiche pour que la couleur des sous-titres Youtube change automatiquement."
Changer le thème de Jupyter
Changer le style de matplotlib
Comment changer la couleur du seul bouton pressé avec Tkinter
Mesurez la couverture de test du code python poussé sur GitHub.
Sous Linux, l'horodatage d'un fichier est un peu dépassé.
Django: fait varier le nombre de formulaires enfants en fonction du nombre d'éléments d'entrée