Search code examples
bashapplescriptiterm2itermosascript

Applescript: iTerm to split pane from the window the script was called


I have the following script with attempts to split the window vertically, and tail a log file in the new pane.

#!/bin/bash

COMMAND="tail -f log_file"

# Do something important.
sleep 4

# Split the window, and tail logs.
osascript <<-EOF
tell application "iTerm"
    tell current session of current window
        split vertically with default profile command "$COMMAND"
    end tell
end tell
EOF

However, this script splits the window that is currently in focus, and not the window in which the script is running.

Steps to reproduce the issue:

  1. Open an iTerm window (say W1), and run this script.
  2. While the script is executing sleep 4, open another window (say W2) and keep W2 in focus.
  3. After 4 seconds, the newer window (i.e. W2) will be split vertically.

How to open split the window from W1, the window where the script was called from?


Solution

  • Get the ID of the current session at beginning of the script.

    Later in the script, get the session corresponding to this identifier

    #!/bin/bash
    myID=$(osascript -e 'tell application "iTerm" to id of current session of current window')
    
    COMMAND="tail -f log_file"
    
    # Do something important.
    sleep 4
    
    # Split the window, and tail logs. myID2 is the id of the new session (the split pane)
    myID2=$(osascript <<-EOF
    tell application "iTerm"
        repeat with w in windows
            repeat with t in tabs of w
                tell (first session of t whose its id = "$myID")
                    if exists then return id of (split vertically with default profile command "$COMMAND")
                end tell
            end repeat
        end repeat
    end tell
    EOF)