Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AppleScript / Automator : use selected text as variable

I can't manage to find how to use the selected text as a variable for AppleScript and Automator.

Any ideas?

like image 808
Kevin Avatar asked May 11 '16 08:05

Kevin


2 Answers

For Applescript, it works with other applications. To get the selected text of the front window in an app, Applescript has to use the language/syntax that this app understands/responds to. For very scriptable, text document based apps, there is much similarity, looking something like:

tell app "xyz" to get selection of document 1

However, there really is no standard. Many apps don't have a 'text selection' object in their scriptable dictionary, so you have to do all kinds of workarounds. See these examples:

tell application "Safari" to set selectedText to (do JavaScript "(''+getSelection())" in document 1)

tell application "System Events" to tell application process "TextEdit" to tell attribute "AXSelectedText" of text area 1 of scroll area 1 of window 1 to set selectedText to its value

tell application "Microsoft Word" to set selectedText to content of text object of selection

You can also script "System Events" to simulate the keystroke of command-c in order to copy text.

tell application "System Events" to keystroke "c" using {command down}
delay 1
set selectedText to the clipboard

If you need more specific help, post your code and indicate what app you are working with. If it is not a scriptable app, then you'll have to use the last method, calling System Events. Or, it's possible you can use an OS X Service, which you also asked about.

When you create a Service in Automator, you create a new Workflow of the type Service. Then, simply make sure that at the top of the window it says: "Service receives selected text". You can then use Automator actions to interact with the selected text that gets passed to the actions that follow. Not all programs are compatible with Services, unfortunately.

like image 115
jweaks Avatar answered Oct 23 '22 14:10

jweaks


To see how it works, try this very simple Automator service:

Create a Service in Automator and choose Text and Every application as input.

The first workflow step is Execute Applescript.

The Applescript's input parameter contains the selected text.

Set the Applescript to

on run {input, parameters}
    display dialog (input as text)
    return input
end run

After saving, you will have this action available in the context menu whenever you have selected text.

Maybe the naming is different, I don't know the English descriptions. But I hope this is a good starting point for you.

Have fun, Michael / Hamburg

like image 37
ShooTerKo Avatar answered Oct 23 '22 14:10

ShooTerKo