How to programmatically open a new terminal tab or window

How to programmatically open a new terminal tab or window

How to programmatically open a new terminal tab or window

I stumbled across this while trying to calculate some configuration options and open multiple terminal windows at once to run multiple Node services.

There are two ways to programmatically open a new terminal window or tab on a mac, depending on whether or not you use iTerm or the default Terminal program. I’ll share both, with a brief explanation on how it works.

Open a new window in iTerm2

osascript -e "
      tell application \"iTerm2\"
        set newWindow to (create window with default profile)
        tell current session of newWindow
            write text \"env \"
        end tell
      end tell
    "

Open a new tab in iTerm2

osascript -e "
      tell application \"iTerm2\"
        set newTab to (create tab with default profile)
        tell current session of newTab
            write text \"env \"
        end tell
      end tell
    "

Open a new window in Terminal

osascript -e "
      tell application \"Terminal\"
        activate
        tell application \"System Events\" to keystroke \"t\" using command down
        repeat while contents of selected tab of window 1 starts with linefeed
          delay 0.01
        end repeat
        do script \"env\" in window 1
      end tell
    "

`osascript` is a command to run AppleScript. They can be enclosed in a string or in a file. The `-e` flag tells it that you are passing a command as a string. The weird rules with shell string escaping make it a little challenging to do anything too complicated with this passed in command. There are many more options you can explore with `man osascript`.

Pass arguments to AppleScript file

One final interesting tip. You can save avoid the quote mess with the `-e` flag by saving your AppleScript in a separate file and passing in an argument:

osascript pathToYourScript.scpt myargument

Then in the AppleScript file itself you can access the arguments with a `item 1 of argv` syntax like so:

on run argv
    tell application "Terminal"
        do script "./myscanprogram " & (item 1 of argv) & " 2>&1"
    end tell
end run

I don’t know a whole lot about AppleScript but have heard it can automate just about anything related to your mac. Perhaps I’ll dedicate a future blog post to some interesting use for this.

Leave a Reply

Your email address will not be published. Required fields are marked *