Yes, I'm having a terrible newbie experience with Apple Script.
I need to open a new Terminal window in the current desktop space. NOT move me to another space which has a Terminal running and then open another Terminal window.
Of course, if Terminal is not running then it should start a new Terminal process.
4 Answers
tell application "Terminal" do script " " activate
end tellIt seems weird but it takes advantage of an oddity in how Terminal handles incoming "do script" commands; it creates a new window for each one. You could actually replace that with something useful if you want; it'll execute whatever you want just after opening the new window.
1If you don't have any text in-between the do script " " you won't get an extra command prompt in the terminal.
tell application "Terminal" do script "" activate
end tell 1 I can think of three different ways to do it (the first two stolen from somewhere else but I forget where). I use the third one, which calls a shell script from the applescript, because I want to open a new window every time and because it was the shortest.
Unlike the script built into OS X since at least 10.10, all of these open the terminal in whatever directory is the current working directory in your finder window (i.e. you don't have to have a folder selected in order to open it).
Also included a couple of bash functions to complete the Finder > Terminal > Finder circle.
1. Reuse an existing tab or create a new Terminal window:
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal" if (exists window 1) and not busy of window 1 then do script "cd " & quoted form of myDir in window 1 else do script "cd " & quoted form of myDir end if activate
end tell2. Reuse an existing tab or create a new Terminal tab:
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal" if not (exists window 1) then reopen activate if busy of window 1 then tell application "System Events" to keystroke "t" using command down end if do script "cd " & quoted form of myDir in window 1
end tell3. Generate a new window each time via a shell script called from an applescript
tell application "Finder" set myDir to POSIX path of (insertion location as alias) do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell4. (BONUS) Bash alias to open a new finder window for the current working directory in your terminal
Add this alias to your .bash_profile.
alias f='open -a Finder ./' 5. (BONUS) Change directory in your terminal window to the path of the front Finder window
Add this function to your .bash_profile.
cdf() { target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'` if [ "$target" != "" ]; then cd "$target"; pwd else echo 'No Finder window found' >&2 fi
} 0 The answers above only works if Terminal is already running. Otherwise it opens two Terminal windows at once - one because of the do script and one because of activate.
You can prevent this with a simple if ... else:
if application "Terminal" is running then tell application "Terminal" do script "" activate end tell
else tell application "Terminal" activate end tell
end ifBonus:
If you want to directly run commands you can do this through keystrokes (Not very elegant - I know! But it works)
[...]
else tell application "Terminal" activate tell application "System Events" to keystroke "ls -la" tell application "System Events" to key code 36 end tell
end if