Мы используем AppleScript для отображения файлов из нашего приложения в Finder. Если у пользователя есть альтернативы, например, PathFinder, установленный в качестве замены для Finder, как мы можем найти наше приложение для передачи команд AppleScript?
2 ответа
Вы можете попробовать использовать это:
try
tell application "Path Finder" to reveal "/Users/danielbeck/Downloads"
on error
tell application "Finder" to reveal folder "Downloads" of home
end try
Но это предполагает, что пользователь с Path Finder предпочитает его для раскрытия функциональности.
С другой стороны,
do shell script "open 'file:///Users/danielbeck/Downloads'"
Когда пользователь настроил Path Finder для обработки URL-адресов file://
, откроется папка в Path Finder. Работает только с папками, хотя.
Вы можете использовать следующее, чтобы получить список процессов:
tell application "System Events"
processes
end tell
Ищите процесс с именем Finder. Если не найдено, у пользователя нет запущенного Finder. Или найдите один с именем Path Finder, и, если он найден, используйте его вместо. И т.п.
Хотя @Daniel Beck предоставил хороший ответ выше, вот обработчик, который я использую, чтобы показать в Finder элемент, выбранный в данный момент в Path Finder. Часто мне нужно что-то сделать в окне Finder, поэтому я добавил паузу, пока имя окна Finder не совпадет с именем окна Path Finder.
Для дальнейшего использования я поддерживаю этот фрагмент в моем GistHub по адресу:revePFItemInFinder.applescript
```applescript
--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
on revealPFItemInFinder()
--–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
(* VER: 2.0 2018-03-15
PURPOSE: Reveal Item in Finder that is Selected in Path Finder
RETURNS: alias of item selected in both Finder and Path Finder
AUTHOR: JMichaelTX
--–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
*)
--- GET THE ITEM SELECTED IN PATH FINDER ---
tell application "Path Finder"
set fileList to (get selection)
if ((fileList is missing value) or ((count of fileList) ≠ 1)) then error ("You must select only ONE file in Path Finder.")
set pfWinName to name of window 1
set itemPath to POSIX path of item 1 of fileList
end tell
set itemAlias to alias POSIX file itemPath
--- REVEAL SAME ITEM IN FINDER ---
tell application "Finder"
activate -- to make sure reveal will be in frontmost window
reveal itemAlias
--- Now Wait for New Finder Window with Same Name as Path Finder ---
set finWinName to name of window 1
set maxWaitTime to 2.0
set delayTime to 0.1
set waitTime to 0
repeat while finWinName ≠ pfWinName
delay delayTime
set finWinName to name of window 1
set waitTime to waitTime + delayTime
if (waitTime > maxWaitTime) then error "Max wait time of " & maxWaitTime & " exceeded waiting for Finder Window of " & pfWinName
end repeat
end tell
return itemAlias
end revealPFItemInFinder
```