How to execute a command in full screen mac terminal using Apple Script? - macos

I am trying to automate this using apple script. Let me list down the steps below;
Open a new Mac Terminal window
Make it full-screen
echo "hello world" or sh /some/script/file.sh
I am trying the script below;
tell application "Terminal"
do script " "
activate
end tell
tell application "System Events"
keystroke "k" using {command down}
keystroke "f" using {command down, control down}
end tell
Basically, this script will open a new terminal window and make it full-screen. I am stuck at step 3, which is simply echoing some message, or executing a shell script.
Could somebody please explain how to achieve this?
Thank you.

Related

Add mark to Terminal in background using AppleScript

The macOS Terminal has a nice "mark" feature that allows you to jump between prompts using Cmd+Up/Down. I'm trying to insert my own "marks" from inside of a Python script so that I can jump to specific parts of the output (example).
Thanks to Armin Briegel, I have:
osascript -e 'tell app "System Events" to keystroke "u" using command down'
This works, but has a few problems. It doesn't add a "mark" if the Terminal is not in focus. Also, it triggers the Terminal bell alert if the Terminal is not in focus. Any way to improve this?
Use this to bring Terminal into focus first.
osascript -e 'tell application "System Events" to tell its application process "Terminal" to set frontmost to true'

Trying to automate tabs and shell commands in Terminal?

I have a custom vim setup running inside split (GNU) screen sessions running in several tabs inside Terminal. Naturally I want to automate all that. So Ive Googled a lot and most answers talk about using osascript -e to run a bunch of AppleScript commands. My situation is slightly different: first Im using TotalTerminal, a plugin for Terminal (dont think it matters but mention it just in case) and Im writing a hashbang script and not a bash script, i.e.
#!/usr/bin/osascript
tell application "System Events" to tell process "Terminal" to keystroke "t" using command down
tell application "Terminal" to activate
tell application "Terminal" to do script with command "cd ~/Desktop/Projects && screen -d -U -R -A"
which Im running from the command-line. The tab opening works but the script/command runs in a new window instead of inside a newly-created tab.
This is how I might recommend setting things up:
#!/usr/bin/osascript
tell application "System Events"
tell process "Terminal"
set frontmost to true
end tell
end tell
tell application "Terminal"
activate
tell application "System Events" to keystroke "t" using command down
do script "cd ~/Desktop/Projects && screen -d -U -R -A" in window frontmost
do script "clear; echo 'Hello, World!'" in tab 1 of window frontmost
end tell
Note: You also can select the tab you want the next command to go into by using tab x. If you switch back to the first tab you should notice the echo sent to it after creating the new tab.
The example above is a few more lines of code perhaps, although it should get all the processes correctly in order. I think the key ingredient is having Terminal set frontmost to true which gets the current Terminal window to start interacting with the rest of the script.
EDIT: The OP came back and needed to make a few changes and this was the end result:
#!/usr/bin/osascript
tell application "System Events"
tell process "Terminal"
set frontmost to true
end tell
end tell
tell application "Terminal"
activate
do script "mosh user#someserver" in window frontmost
tell application "System Events" to keystroke "t" using command down
do script "cd ~/Desktop/Projects && screen -d -U -R -A" in tab 2 of window frontmost
end tell

Use one terminal instance for many do shell scripts?

So, I need to make an AppleScript to ssh into my mint headless server. I don't need to transfer files, just run commands. The issue is, when I ssh with one do shell script, it is in a separate instance than the others. Also, bonus if I don't have to use keystrokes and keep the terminal in front.
Edit: It would help if you guys told me why you're downvoting this post.
Not sure if that is what you want but with Terminal.app you can do that:
set shellScript to "echo" & space & quoted form of "Test Message"
tell application "Terminal"
activate
try
if (exists tab 1 of window 1) then
do script with command shellScript in front window
else
do script with command shellScript
end if
on error
beep
end try
end tell
Above code executes shellScript in the front window or in a new window when no window is open. Hope it helps.
ADDITION
I think there is no AppleScript script command to hide an application.
With System Events we can do a keystroke, so let's do cmd-h which hides an application:
tell application "System Events"
tell application process "Terminal" to set frontmost to true
-- delay 0.25 -- in case it does not work
keystroke "h" using command down
end tell
I don't know how Terminal.app will behave with hiding and doing scripts but you will find out.
Or put the Terminal-Window in another Finder Space.

OSX Terminal close current tab from command line without prompt?

Looking for a way to close the current tab via the command line, I hashed this out, but end up getting a prompt for Do you really want to close which I would like to avoid. Here's my code,
osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "w" using command down'
Why didn't use the:
Terminal.app -> Preferences -> Settings -> Shell
and for the items:
"When the shell exists:" Close if the shell exited cleanly
"Prompt before closing:" Only if there are...." (or Never)

Applescript: Keeping track of multiple terminal windows and writing into each of them

I've got a setup procedure for a project that involves me using multiple terminal windows. The start up procedure is sort of messy and involves me tabbing between the terminal windows (different tools running) and sequentially inputting commands into each terminal.
Applescript is useful for getting the first run of commands out and opening all my terminals with the:
do script "echo blablablabla"
These are decent because they open new terminal windows each time I "do script". This is actually more beneficial to me than tabbing (although, I couldn't quite figure out tabbing between terminal tabs).
However, I'd like to keep track of these windows since I need to go back to specific ones and input more commands. Any ideas?
More specifically:
Is there a way I can add an alias for each window to track it and tab back to it in the Applescript? If so, how do I implement it?
do script has an in specifier:
tell application "Terminal"
set t to do script "echo a"
do script "echo b"
do script "echo c" in t
set index of window 2 to 1
end tell
Or using tabs:
tell application "Terminal"
activate
set t to do script "echo a"
tell application "System Events" to keystroke "t" using command down
do script "echo b" in window 1
set selected tab of window 1 to t
end tell

Resources