所有文章

为什么你的自动操作快速操作只出现在访达中

· 阅读约 6 分钟

你在“自动操作”(Automator)里做了一个快速操作——把声音转成 MP3、缩小图片、把文件发到服务器——而且它能用:在访达中右键点按一个文件,它就在快速操作里。可是在另一个 App 里右键点按同一个文件,或者打开它的服务菜单,这个操作却哪儿都找不到。

并没有什么坏掉了。答案就在工作流程顶部的一个菜单里。

简短的答案:“Finder.app”

每个快速操作开头都有一行:工作流程收到当前[文件或文件夹],后面是选择 App 的第二个菜单(例如[任何应用程序])。当这第二个菜单选的是访达(Finder.app)时,“自动操作”会在快速操作里写下一条规则:只在访达中提供。macOS 严格照办,把这个操作从其他所有 App 的“服务”中拿掉——它们的右键菜单里没有,App 菜单的服务子菜单里也没有。

所以,只限访达的快速操作在别处并不是“丢了”:它本来就被设定为留在访达里。

检查快速操作的设置

“自动操作”把你的快速操作存放在“资源库”的 Services 文件夹里。在访达中选取前往文件夹…(⇧⌘G),输入 ~/Library/Services:每个快速操作都是一个 .workflow 文件。为这台 Mac 的所有用户安装的快速操作在 /Library/Services 里,macOS 自带的则在 /System/Library/Services 里。

如果不想打开“自动操作”就读到这条规则,可以在“终端”中输入下面的命令(换成你的快速操作的名称):

plutil -p ~/Library/Services/"转换为MP3.workflow"/Contents/Info.plist

只限访达的快速操作,在 NSServices 下面有这几行:

"NSRequiredContext" => {
  "NSApplicationIdentifier" => "com.apple.finder"
}

为任何应用程序制作的快速操作则完全没有 NSRequiredContext。NSSendFileTypes 这一行说明它接受什么:声音是 public.audio,视频是 public.movie,图片是 public.image,任何文件是 public.item。macOS 自带的对所选音频文件进行编码和编码所选视频文件,正是这样只限访达的。

怎样让它出现在其他 App 中

把“Finder.app”改成“任何应用程序”

  1. 在访达中右键点按 .workflow 文件,选取打开方式 › 自动操作。
  2. 在顶部那一行,把第二个菜单从访达(Finder.app)改成任何应用程序。
  3. 按 ⌘S 存储。

“自动操作”会去掉这条规则,快速操作就变成一个普通的服务。

弄清另一个 App 必须交给它什么

还有第二个条件,能解释大多数“还是没出现”的情况。接收文件或文件夹的快速操作,只会出现在前台 App 会把文件交给服务的地方。文本编辑器或浏览器里选中的是文字而不是文件,文件操作没有东西可处理,macOS 也就不会列出它。它会出现在处理文件、并支持“服务”的 App 中。

确认它已打开

打开系统设置 › 键盘 › 键盘快捷键… › 服务。在文件和文件夹下,每个服务都有一个复选框;取消勾选的服务在任何地方都会被隐藏。你也可以在这里给它设置键盘快捷键。在访达中,右键菜单底部的快速操作 › 自定义…会打开访达快速操作的列表,每一个都可以单独打开或关闭。

当心向访达询问的操作

如果你的工作流程以获取所选的访达项目这个操作开头,它会向访达询问当前的选择。在访达中,那就是你右键点按的文件;在别的地方,它取的是此时恰好在某个访达窗口里选中的东西。快速操作本来就会把所选项目作为输入,所以这个操作通常可以删掉。

让它只留在访达,并在 Folia Files 中运行

你可能不想动某个快速操作:它是和别人共用的,它依赖访达,或者它是 macOS 自带的。如果你用 Folia Files 管理文件,就什么都不用改。网站版会读取同样的 Services 文件夹,把只限访达的快速操作——也就是 macOS 从“服务”中拿掉的那些——放在右键菜单末尾、紧跟在在“访达”中显示之后的快速操作子菜单里。

Folia Files 中一个视频的右键菜单,末尾“在‘访达’中显示”之后是快速操作

它遵循和访达一样的逻辑:

  • 只显示适合所选项目的操作。 选一个视频,会看到编码所选视频文件;选一个声音,会看到对所选音频文件进行编码。把声音和视频一起选中,两个都不会出现,因为每个操作只接受自己那一类文件。
  • 文件夹也可以。 在文件夹的空白处右键点按,就能对这个文件夹本身运行接受文件夹的操作。
  • 不会重复。 为任何应用程序制作的快速操作,已经在 macOS 加在菜单最末尾的服务子菜单里(和访达一样),所以不会在“快速操作”中再出现一次。
  • 你的设置照样有效。 在 macOS 设置中对右键菜单关闭的操作不会显示。
  • 用你的语言显示。 如果工作流程带有翻译,名称会跟随 App 的语言,macOS 自带的两个编码操作就是这样。

一段 WAV 录音的快速操作子菜单:对所选音频文件进行编码

运行之后会发生什么

Folia Files 会像访达那样,把所选项目作为文件交给 macOS 自带的 automator 工具:

  • 运行情况显示在工具栏按钮操作中(拷贝和移动也在这里显示),并显示正在执行的“自动操作”动作的名称。
  • 如果工作流程会显示窗口(编码操作会先显示它们的选项),这个窗口会像从访达运行时一样来到最前面。在窗口中点取消,操作也会被取消。
  • 点操作旁边的 ✕ 可以停止它,包括“自动操作”正在进行的处理。
  • 如果工作流程失败,会显示“自动操作”自己的错误信息。
  • 它生成的东西(通常是原文件旁边的新文件)在完成后立即出现在文件夹中。

它和右键菜单里的其他工具(包括服务和共享)放在一起,详见文件工具页面。

需要了解的限制

  • 这是网站版的功能。App Store 版运行在沙盒中,没有这个子菜单。
  • 用快捷指令 App 制作的快速操作属于另一类,不会列在这里;设置为在“服务”菜单中显示的快捷指令会出现在服务中。
  • 对作为文件夹打开的 ZIP 里的文件(只读),以及一次超过 500 个项目的选择,不会提供任何操作。
  • 不需要这个子菜单?在设置 › 上下文菜单中,访达的快速操作(自动操作)这一行可以保留在菜单中、移到在“更多”中,或者隐藏——参见如何自定义 Mac 的右键菜单。

总结

  • 设置为访达(Finder.app)的快速操作带有一条规则(NSRequiredContext → com.apple.finder),让它在其他所有 App 的“服务”中隐藏。
  • 想在别处使用,就把它改成任何应用程序,确认它在键盘快捷键 › 服务中已打开,并记住文件操作需要一个会把文件交给它的 App。
  • 或者保持原样,在 Folia Files 右键菜单的快速操作中运行它。