How to write a text in Terminal using AppleScript?
Solution 1:
You can try something like, first copying the text to your clipboard, that you want inserted into Terminal, then have the AppleScript code paste the clipboard into Terminal.
tell application "Terminal"
activate
tell application "System Events"
tell application process "Terminal"
set frontmost to true
repeat while not frontmost
delay 0.1
end repeat
end tell
keystroke "v" using {command down}
end tell
end tell
If you have all of your Terminal windows set to open in tabs rather than separate windows, this following AppleScript code should account for any of the situations as mentioned by @user3439894 in his comment to your post.
tell application "Terminal"
activate
repeat until frontmost
delay 0.5
end repeat
set windowCount to count of window
if windowCount is not 0 then
tell its front window
set isMinimized to miniaturized
end tell
end if
if windowCount is 0 then
tell application "System Events" to tell application process "Terminal"
set frontmost to true
repeat while not frontmost
delay 0.1
end repeat
keystroke "n" using {command down}
delay 1
keystroke "v" using {command down}
end tell
else
activate
repeat until frontmost
delay 0.5
end repeat
delay 0.1
if ((processes of selected tab of front window) is {} or isMinimized) then
tell application "System Events" to tell application process "Terminal"
set frontmost to true
repeat while not frontmost
delay 0.1
end repeat
keystroke "n" using {command down}
delay 1
keystroke "v" using {command down}
end tell
else
tell application "System Events" to tell application process "Terminal"
set frontmost to true
repeat while not frontmost
delay 0.1
end repeat
delay 0.5
keystroke "v" using {command down}
end tell
end if
end if
end tell
Solution 2:
I've marked the above answer as correct even though it did not solve my problem because there is a lot of other useful code.
My unsolved issues: 1. modifier keys are still interfering even with CMD-c trick 2. Clipboard trick alters the clipboard. I could set it back to original value but that changes the history.
My solution: Don't run the script till any modifier keys are pressed. It's also kind of a trick but it solves the root-cause.
Here is my code:
- (void) cmd_panel_curItem_sendPathToTerminal;
{
if (self.noKeyModifiersTimer != nil) {
return;
}
self.noKeyModifiersTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(_cmd_panel_curItem_sendPathToTerminal) userInfo:nil repeats:YES];
}
- (void) _cmd_panel_curItem_sendPathToTerminal;
{
NSUInteger modifiers = ([NSEvent modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask);
if ((modifiers & NSEventModifierFlagOption) == 0 && (modifiers & NSEventModifierFlagShift) == 0 && (modifiers & NSEventModifierFlagCommand) == 0 && (modifiers & NSEventModifierFlagControl) == 0) {
[self.noKeyModifiersTimer invalidate];
self.noKeyModifiersTimer = nil;
[self impl_panel_curItem_sendPathToTerminal];
}
}
- (void) impl_panel_curItem_sendPathToTerminal;
{
// orig code
}