AppleScript和Finder - 如何在将路径复制到剪贴板时检测“空”选择(扩展问题)


4

我正在尝试构建一个执行以下操作的服务:

  • 如果在Finder中选择了某些文件夹/文件,请复制(全部)到剪贴板的路径
  • 如果未选择任何内容,请复制窗口的“路径”。

从诸如此类的帖子中挖掘并获取灵感 将当前目录的路径复制到剪贴板 和MacYourself的 将文件或文件夹路径复制到Mac OS X Lion中的剪贴板 我已经达到了我可以获得选择路径的程度,但是如果选择为空,我在尝试获取当前窗口的路径时似乎陷入困境。

更新2013年12月13日。我得到了一些有用的反馈(见 https://apple.stackexchange.com/a/113612/7488 ;谢谢@Flavin)所以我已将代码更新为以下代码:

    on run {input, parameters}

        set l to {}
        tell application "Finder"
            set sel to (get selection)
            if not sel = {} then -- there are some file/folders selected

                repeat with f in (get selection)
                    set end of l to POSIX path of (f as alias)
                end repeat

            else --no stuff is selected, get the current location path

                set end of l to POSIX path of (insertion location as alias)

            end if
        end tell
        set text item delimiters to linefeed
        set the clipboard to (l as text)

    end run

逻辑似乎很可靠,只要我在Finder中选择了“某些东西”,它就会起作用。

我怀疑当没有选择时,服务可能不是“活动”(也就是说,当所需的结果是将当前路径复制到剪贴板时)。

在这种情况下,Finder窗口如此出现:

Finder With nothing selected

但尝试激活服务会显示“空”服务列表:

Finder No services apply

当我选择了某些内容时,将填充“服务”列表:

Services Available when some File is selected

我定义的“复制文件路径”与“服务首选项”中的“文件和文件夹”相关联 - 可能是什么问题?

Answers:


2

我认为 = 是你在找什么。

set sel to (get selection)
if not sel = {} then
    --stuff is selected
else
    --no stuff is selected
end if

或删除 not 并翻转案件

set sel to (get selection)
if sel = {} then
    --no stuff is selected
else
    --stuff is selected
end if

谢谢你的确认;逻辑似乎很稳固,但行为仍然不是我需要的。我将用一些可能相关的信息更新问题
JJarava

1

它现在有效。关键在于如何定义“Automator”服务。

最初配置时,Automator服务在“Finder”中定义为“文件或文件夹”:

Service for Input Files and Folders in Finder

因此,在首选项中,服务与文件和文件夹相关联:

Preferences-File-Folders

结果是,当没有选择时,服务不是“活动的”(我们得到的图像与问题相同):

Finder No services apply

将服务定义更改为“无输入”:

Service with No Input

意味着服务 在Finder中没有选择时可用:

Service associated with Finder and no input

签入服务首选项,现在服务与“常规”类别相关联:

Service in the General Category

行为与预期一致。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.