gpt4 book ai didi

applescript - 使用 JXA AppleScript 获取事件 Finder 窗口的 POSIX 路径

转载 作者:行者123 更新时间:2023-12-03 23:56:37 24 4
gpt4 key购买 nike

我想要这个 AppleScript 片段的 JXA 等价物:

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 或手动字符串争吵?

System Events AppleScript Dictionary

如果我天真地尝试这个:

finder.finderWindows[0].target().posixPath()

我收到此错误:

app.startupDisk.folders.byName("Users").folders.byName("kymer").folders.byName("Desktop").posixPath()
--> Error -1728: Can't get object.

SO answer似乎相关,但我似乎无法适应我的需求:

App = Application.currentApplication()
App.includeStandardAdditions = true
SystemEvents = Application('System Events')

var pathToMe = App.pathTo(this)
var containerPOSIXPath = SystemEvents.files[pathToMe.toString()].container().posixPath()

任何帮助将不胜感激!

最佳答案

这么简单的一段 AppleScript 代码没有直接的 JXA 翻译,这一事实证明了 基于 OSA 脚本编写的 JXA 和 macOS 自动化的遗憾状态 :

  • foo's excellent answer包含有用的背景信息。
  • 另一个指针是the last time release notes were published was for OS X 10.11 (El Capitan) (在撰写本文时,我们即将发布 macOS 10.13(High Sierra))。
  • This third-party July 2017 blog post更广泛地宣布“这个问题终于在上个月的 WWDC 上得到了回答: 苹果已经放弃了它的自动化技术,让它们枯萎死亡。

  • 正如你自己的例子所表明的,在两种濒临灭绝的自动化脚本语言中 AppleScript - 尽管有很多缺点 - 是更成熟、更可靠的选择 .

    为了解决您在 JXA 中的问题,您似乎自己想出了最好的方法。
    让我把它打包成 辅助函数这可能在某种程度上减轻了痛苦 - 需要明确的是:这样的辅助功能不应该是必要的:

    // Helper function: Given a Finder window, returns its folder's POSIX path.
    // Note: No need for an ObjC.import() statement, because NSURL is
    // a Foundation class, and all Foundation classes are implicitly
    // available.
    function posixPath(finderWin) {
    return $.NSURL.alloc.initWithString(finderWin.target.url()).fileSystemRepresentation
    }

    // Get POSIX path of Finder's frontmost window:
    posixPath(Application('Finder').finderWindows[0])

    关于applescript - 使用 JXA AppleScript 获取事件 Finder 窗口的 POSIX 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45426227/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com