From dd989dbb656c8659a7fce54ca1714d3608e41557 Mon Sep 17 00:00:00 2001 From: Linnnus Date: Sat, 6 Jul 2024 22:34:40 +0200 Subject: muhammed: Update iTerm2 theme switching script The script didn't check the theme upon startup, which caused some issues if the system-wide theme change happened while iTerm2 was closed. This new version always updates the iTerm2 theme based on the system theme upon startup. --- hosts/muhammed/home/iterm2/auto_theme.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'hosts/muhammed/home/iterm2') diff --git a/hosts/muhammed/home/iterm2/auto_theme.py b/hosts/muhammed/home/iterm2/auto_theme.py index 17a254d..0970304 100644 --- a/hosts/muhammed/home/iterm2/auto_theme.py +++ b/hosts/muhammed/home/iterm2/auto_theme.py @@ -3,24 +3,29 @@ import asyncio import iterm2 +async def update(connection, theme): + # Themes have space-delimited attributes, one of which will be light or dark. + parts = theme.split(" ") + if "dark" in parts: + preset = await iterm2.ColorPreset.async_get(connection, "Dark Background") + else: + preset = await iterm2.ColorPreset.async_get(connection, "Light Background") + + # Update the list of all profiles and iterate over them. + profiles=await iterm2.PartialProfile.async_query(connection) + for partial in profiles: + # Fetch the full profile and then set the color preset in it. + profile = await partial.async_get_full_profile() + await profile.async_set_color_preset(preset) + async def main(connection): + app = await iterm2.async_get_app(connection) + await update(connection, await app.async_get_variable("effectiveTheme")) async with iterm2.VariableMonitor(connection, iterm2.VariableScopes.APP, "effectiveTheme", None) as mon: while True: # Block until theme changes theme = await mon.async_get() + await update(connection, theme) - # Themes have space-delimited attributes, one of which will be light or dark. - parts = theme.split(" ") - if "dark" in parts: - preset = await iterm2.ColorPreset.async_get(connection, "Dark Background") - else: - preset = await iterm2.ColorPreset.async_get(connection, "Light Background") - - # Update the list of all profiles and iterate over them. - profiles=await iterm2.PartialProfile.async_query(connection) - for partial in profiles: - # Fetch the full profile and then set the color preset in it. - profile = await partial.async_get_full_profile() - await profile.async_set_color_preset(preset) iterm2.run_forever(main) -- cgit v1.2.3