Applescript: iTerm, чтобы отделить панель от окна, в котором был вызван скрипт

У меня есть следующий скрипт с попытками разделить окно по вертикали и сохранить файл журнала на новой панели.

#!/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

Однако этот сценарий разделяет окно, которое в данный момент находится в фокусе, а не окно, в котором выполняется сценарий.

Действия по воспроизведению проблемы:

  1. Откройте окно iTerm (скажем, W1) и запустите этот скрипт.
  2. Пока скрипт выполняет sleep 4, откройте другое окно (скажем, W2) и держите W2 в фокусе.
  3. Через 4 секунды более новое окно (например, W2) будет разделено по вертикали.

Как открыть разделенное окно из W1, окна, из которого был вызван скрипт?


person John Bupit    schedule 29.08.2016    source источник


Ответы (1)


Получить идентификатор текущего сеанса в начале скрипта.

Далее в скрипте получите сессию, соответствующую этому идентификатору

#!/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)
person jackjr300    schedule 01.09.2016
comment
Работает отлично, спасибо. Есть ли вероятность, что существует несколько окон с одним и тем же идентификатором? - person John Bupit; 01.09.2016