Мне нужен JXA-эквивалент этого фрагмента AppleScript:
tell application "Finder"
# Get path
set currentTarget to target of window 1
set posixPath to (POSIX path of (currentTarget as alias))
# Show dialog
display dialog posixPath buttons {"OK"}
end tell
Самое близкое, что я получил, это использование свойства url
для инициализации Foundation NSURL и получить доступ к его свойству fileSystemRepresentation. вот так:
// Get path
var finder = Application('Finder')
var currentTarget = finder.finderWindows[0].target()
var fileURLString = currentTarget.url()
// I'd like to get rid of this step
var fileURL = $.NSURL.alloc.initWithString(fileURLString)
var posixPath = fileURL.fileSystemRepresentation
// Show dialog
finder.includeStandardAdditions = true
finder.displayAlert('', {buttons: ['Ok'], message: posixPath})
Но это кажется излишне сложным. Есть ли более удобный способ перейти к пути POSIX без использования Foundation API или обработки строк вручную?
Если я наивно попробую это:
finder.finderWindows[0].target().posixPath()
Я получаю такую ошибку:
app.startupDisk.folders.byName("Users").folders.byName("kymer").folders.byName("Desktop").posixPath()
--> Error -1728: Can't get object.
Этот ответ SO кажется актуальным, но я не могу адаптировать его под свои нужды:
App = Application.currentApplication()
App.includeStandardAdditions = true
SystemEvents = Application('System Events')
var pathToMe = App.pathTo(this)
var containerPOSIXPath = SystemEvents.files[pathToMe.toString()].container().posixPath()
Любая помощь будет принята с благодарностью!
NSURL
в своем ответе. - person vadian   schedule 07.08.2017NSURL
, потому что это самое простое и надежное решение с учетом обстоятельств, но, чтобы быть абсолютно ясным: это НЕ должно быть необходимо . Я прояснил это в своем ответе. - person mklement0   schedule 07.08.2017