def start_listener(port): # Launch the app AppKit.NSWorkspace.sharedWorkspace().launchApplication_("iTerm2") async def main(connection): app = await iterm2.async_get_app(connection) window = app.current_window if window is not None: cmd = "nc -lnv {}".format(port) await window.async_create_tab(command=cmd) else: print("No current window") iterm2.run_until_complete(main)
def main(cwd, command): """ Author: Sandro Braun - 2021 create new iterm tab and run command Parameters ---------- cwd : [str] directory to cd into before running command command: [str] command to exectue, i.e. the full command will be 'cd $path; command' Examples -------- ./iterm.py ~/Desktop vi References ---------- * https://iterm2.com/python-api/examples/launch_and_run.html * https://raymondjulin.com/blog/exploring-the-iterm2-python-api * https://gist.github.com/theRealSuperMario/31f7429d9c805165e1dd30ccbd744ec7 """ # Launch the app AppKit.NSWorkspace.sharedWorkspace().launchApplication_("iTerm2") async def _main(connection): app = await iterm2.async_get_app(connection) # Foreground the app await app.async_activate() window = app.current_window if window is not None: new_tab = await window.async_create_tab() cmd = f"/bin/zsh -l -c 'cd {cwd};{command}'\n" await new_tab.async_select() await new_tab.current_session.async_send_text(cmd) iterm2.run_until_complete(_main, True)
if window is not None: # Run ryanair service await window.async_create_tab() session = app.current_terminal_window.current_tab.current_session await session.async_send_text('cd ~/code/indie-ryanair-service\nys\n') time.sleep(timeout) change = iterm2.LocalWriteOnlyProfile() color = iterm2.Color(204, 0, 126) change.set_tab_color(color) change.set_use_tab_color(True) await session.async_set_profile_properties(change) await session.async_set_name("ryanair serv") # Run ryanair frontend await window.async_create_tab() session = app.current_terminal_window.current_tab.current_session await session.async_send_text('cd ~/code/indie-ryanair-frontend\nys\n') time.sleep(timeout) change = iterm2.LocalWriteOnlyProfile() color = iterm2.Color(0, 140, 240) change.set_tab_color(color) change.set_use_tab_color(True) await session.async_set_profile_properties(change) await session.async_set_name("ryanair front") else: # You can view this message in the script console. print("No current window") iterm2.run_until_complete(main)
def main(): iterm2.run_until_complete(activate)
# https://iterm2.com/python-api/examples/index.html import sys, os import iterm2 import asyncio from mpiterm2.lib.session import get_session_by_path PATH = None if len(sys.argv) >= 2: PATH = sys.argv[1] if PATH == "--help" or PATH == "-h": print("USAGE: ./go_to_session.py [PATH]") os.exit(1) async def go_to(connection): app = await iterm2.async_get_app(connection) if PATH is None: session = app.current_terminal_window.current_tab.current_session else: session = await get_session_by_path(app, PATH.rstrip("/")) await session.async_activate(True, True) await app.async_activate(True, True) print("Done") iterm2.run_until_complete(go_to)
# brew install python3 # pip3 install --user iterm2 # pip3 install --user pyobjc # chmod +x iterm_command.py # import string import sys # 2019-May-21: Requires iTerm that has the Python API enabled (beta (v3.3+)) import iterm2 import AppKit bundle = "com.googlecode.iterm2" if not AppKit.NSRunningApplication.runningApplicationsWithBundleIdentifier_(bundle): AppKit.NSWorkspace.sharedWorkspace().launchApplication_("iTerm") async def main(connection): """Main routine.""" app = await iterm2.async_get_app(connection) await app.async_activate() # This will run 'ssh' on macOS with the arguments supplied my_cmd = "/usr/bin/ssh " + " ".join(sys.argv[1:]) # print(my_cmd) await iterm2.Window.async_create(connection, command=my_cmd) iterm2.run_until_complete(main, True)
#!/usr/bin/env python3.7 import iterm2 # This script was created with the "basic" environment which does not support adding dependencies # with pip. async def main(connection): # Your code goes here. Here's a bit of example code that adds a tab to the current window: app = await iterm2.async_get_app(connection) window = app.current_terminal_window if window is not None: await window.async_create_tab() else: # You can view this message in the script console. print("No current window") iterm2.run_until_complete(main)
def main(): init(sys.argv) iterm2.run_until_complete(iTerm)
return iterm2.Color(59, 109, 124) else: return iterm2.Color(114, 114, 124) async def get_colour_preset(connection, is_dark): """Return the dark or light colour preset.""" if is_dark: return await iterm2.ColorPreset.async_get(connection, "Solarized Dark") else: return await iterm2.ColorPreset.async_get(connection, "Solarized Light") async def set_colours(connection, preset, ansi_8_color): """Set the colour preset for all profiles.""" profiles = await iterm2.PartialProfile.async_query(connection) for partial in profiles: profile = await partial.async_get_full_profile() await profile.async_set_color_preset(preset) await profile.async_set_ansi_8_color(ansi_8_color) async def switch_now(connection): """Set the correct colour preset based on the current theme.""" app = await iterm2.async_get_app(connection) theme = await app.async_get_variable("effectiveTheme") is_dark = is_dark_theme(theme) preset = await get_colour_preset(connection, is_dark) ansi_8_color = get_ansi_8_color(is_dark) await set_colours(connection, preset, ansi_8_color) if __name__ == '__main__': iterm2.run_until_complete(switch_now)
#!/usr/bin/env python3 import iterm2 import os import subprocess paths = [ '~/Projects/Qissa/api-gateway/', '~/Projects/Qissa/dataset-handler/', '~/Projects/Qissa/qissa-creator/', '~/Projects/Qissa/user-control/', '~/Projects/Qissa/qissa-ui/', ] async def tab(connection): app = await iterm2.async_get_app(connection) window = app.current_terminal_window if window is not None: await window.async_create_tab() else: print("No current window") for x in paths: print(x) iterm2.run_until_complete(tab) os.chdir(x)
def set_colors(which, restore=False): # Set terminal colors. # # There are several possible terminals I might be in, and the behavior I # want is different for each one. if os.getenv('VIMRUNTIME'): # neovim terminal # # Do nothing to the terminal, but continue with other changes. pass elif 'kitty' in os.getenv('TERM'): # kitty run([ 'kitty', '@', 'set-colors', '--configured', '--all', f'~/.nix-profile/config/kitty/{which}.conf', ], check=True) elif os.getenv('TERM_PROGRAM') == 'iTerm.app': # iterm2 # # We don't need to restore on iterm2, because the color is stored in the profile. # And every time we change the color, iterm2 pops up a confirmation box, which # we don't want on every new tab and window. if not restore: async def iterm2_set_colors(connection): preset = await iterm2.ColorPreset.async_get( connection, f'Solarized {"Dark" if which == "dark" else "Light"}', ) for partial in (await iterm2.PartialProfile.async_query(connection)): if partial.name in ["Default"]: await partial.async_set_color_preset(preset) iterm2.run_until_complete(iterm2_set_colors) elif os.getenv('SSH_TTY'): # Connected over ssh. # # The terminal is therefore not running on this machine, and we # will not try to manipulate its colors. # # Do nothing to the terminal, but continue with other changes. pass else: print( "I don't recognize this terminal, so not trying to change its color.", # important to print to stderr, because stdout gets consumed as # a shell script file=sys.stderr, ) # Set bat config var. print(f'export BAT_THEME="Solarized ({which})"') # Persist for next time. # My vim config also reads this file to determine colors on startup. with open(color_config_path, 'w') as f: f.write(which)