Tell application id WHAT ? (a script for the perplexed)

A script for those moments when you can’t remember the creator code or bundle identifier of one of the applications you want to automate. :wink:

It will list the codes for all the applications running on your system, and if you want, you can enter a search string (for part of the application name) to filter the list down.

It will also place a tell application id block (using the 4 letter creator code, or the longer bundle identifier) in the clipboard.

For various reasons, I am tending towards the creator code idiom these days. (Not least because some of the apps I use are now adding .appstore to the bundle identifiers of that subset of their builds …).

(Ver .04 below should be compatible with LaunchBar and Keyboard Maestro. Tap space bar to pass a search string to it directly from LaunchBar).

-- Get creator codes and bundle identifiers for tell applications blocks
-- (for applications currently running
-- Ver .05 Compatible with LaunchBar - select script, tap space bar and enter string in Launchbar

property pTitle : "Tell application id ..."

property pDefaultSearch : "dev"

property pCodeCopy : "Copy creator code"
property pBundleCopy : "Copy bundle identifier"
property pNameCopy : "Copy app name"

-- System Events
on run
	tell application id "sevs"
		activate
		set strSearch to text returned of (display dialog "Enter part of application name:
	
(or leave blank to see all running applications)" default answer pDefaultSearch with title pTitle)
	end tell
	
	handle_string(strSearch)
end run

on handle_string(strSearch)
	tell application id "sevs"
		
		if (strSearch ≠ "") and (strSearch ≠ "*") then
			set {lstCode, lstBundle, lstFile} to {creator type, bundle identifier, file} of (application processes where name contains strSearch and bundle identifier is not missing value)
			set strPrompt to "Applications with \"" & strSearch & "\" in their name:"
		else
			set {lstCode, lstBundle, lstName, lstFile} to {creator type, bundle identifier, name, file} of (application processes where bundle identifier is not missing value)
			set strPrompt to "All currently running applications:"
		end if
		repeat with i from 1 to length of lstCode
			set varFile to item i of lstFile
			if varFile ≠ missing value then
				set strName to (name of item i of lstFile)
			else
				set strName to item i of lstName
			end if
			
			set item i of lstCode to item i of lstCode & "=" & item i of lstBundle & "=" & strName
		end repeat
		
		set my text item delimiters to linefeed
		set strApps to lstCode as string
		
		set lstApps to paragraphs of (do shell script "echo " & quoted form of strApps & " | sort -t '=' -k 3")
		if length of lstApps > 0 then
			set lstDefault to {first item of lstApps}
		else
			activate
			display alert "No running apps have names matching " & strSearch
			return
		end if
		activate
		set varChoice to choose from list lstApps with prompt strPrompt default items lstDefault with title pTitle
		
		if varChoice is false then return
		
		set my text item delimiters to "="
		set {strID, strBundle, strName} to text items 1 thru 3 of first item of varChoice
		
		set {blnCode, blnBundle, blnName} to {true, true, true}
		
		-- CREATOR CODE
		if strID ≠ "????" then
			set strCode to "tell application id \"" & strID & "\""
		else
			set blnCode to false
			set strCode to strName & " has no creator code ..."
		end if
		
		-- BUNDLE IDENTIFIER
		if strBundle ≠ "missing value" then
			set strBundle to "tell application id \"" & strBundle & "\""
		else
			set blnBundle to false
			set strBundle to strName & " has no bundle identifier"
		end if
		
		-- APPLICATION NAME
		if strName ends with ".app" then
			set strName to text 1 thru -5 of strName
			set strAppName to "tell application \"" & strName & "\""
		else
			set blnName to false
			set strAppName to ""
		end if
		
		
		set strChoice to "CREATOR CODE:    " & strCode & "

BUNDLE IDENTIFIER:    " & strBundle & "

APP NAME:    " & strAppName
		
		
		set lstBtns to {}
		if blnName then set end of lstBtns to pNameCopy
		if blnBundle then set end of lstBtns to pBundleCopy
		if blnCode then set end of lstBtns to pCodeCopy
		set lngButtons to length of lstBtns
		
		if lngButtons > 0 then
			set strClip to "-- " & strName & return
			activate
			set strBtn to (button returned of (display dialog strChoice buttons lstBtns default button lngButtons with title strName))
			if strBtn = pCodeCopy then
				set strClip to strClip & strCode
			else if strBtn = pBundleCopy then
				set strClip to strClip & strBundle
			else
				set strClip to strAppName
			end if
			set the clipboard to strClip & return & return & "end tell"
		else
			activate
			display alert strName & " is not a scriptable process"
		end if
		set my text item delimiters to space
	end tell
end handle_string


1 Like

This is excellent, Robin.

When will you write the book on DT scripting? (A real suggestion :wink: )

Under 10.9.2 (perhaps also 10.8.x) the script fails at these statements


set {lstCode, lstBundle, lstFile} to {creator type, bundle identifier, file} of (application processes where name contains strSearch and bundle identifier is not missing value)

which needs to be changed to


set {lstCode, lstBundle, lstFile} to {creator type, bundle identifier, file} of (application processes where name contains strSearch and bundle identifier is not (missing value as string))

and


set {lstCode, lstBundle, lstName, lstFile} to {creator type, bundle identifier, name, file} of (application processes where bundle identifier is not missing value)

which needs to be changed to


set {lstCode, lstBundle, lstName, lstFile} to {creator type, bundle identifier, name, file} of (application processes where bundle identifier is not (missing value as string))

1 Like

Thanks to the OP for the script, (and korm for the update).

It works. And whereas I still need to start my “Learn Applescript” project – I can already understand how useful this will be!

And FWIW – rest assured, that IF someone was to publish an e-book containing script examples and how to’s for DTPO - I would buy it in a heartbeat. And I would gladly spend the money. Can only see it adding tonnes of value!

Just putting that out there — nudge nudge, wink wink.

Some 7 years later, this thread helps me.

I love this forum!

1 Like