在MacOS Finder上添加脚本到上下文菜单

13

我想在Finder上下文菜单中添加一个选项,调用hg add %1,其中%1是Finder中所选文件的完整路径。
当然,我还可以想到更多有用的情况,添加到上下文菜单中。
是否有一种简单的方法来实现这一点,而不涉及安装任何第三方软件或编写编译语言并构建二进制插件?
例如使用脚本编辑器创建一个脚本并将其放在/Library/Contextual Menu Items/中?


1
好的...打开 Automator,创建一个自定义工作流。从“库”中选择“实用工具”,然后将“运行 shell 脚本”拖放到工作流中。将“传递输入”设置为“作为参数”。在脚本中编写:hg add $1。然后在“文件”菜单中->保存插件,指定名称,选择 Finder 的插件,保存。右键单击文件,选择“更多”->“Automator”-><PLUGIN_NAME>,然后享受它。但这里没有任何关于编程的内容... - khachik
@khachik:这仍然与开发相关。你应该把你的评论变成一个答案。 - Philip Regan
@Philip 好的,这实际上是一个答案... - khachik
3个回答

21
Snow Leopard/10.6+的步骤已经和 @khachik 的正确回答不同了。为了确保清晰,以下是步骤:
- 打开 Automator - 创建一个新的“Service”(服务) - 在顶部的两个下拉菜单中选择“Service receives selected files or folders in Finder.app” - 设置 Pass input 为 "as arguments" - 编写您的脚本 (请参见下面的内容). - 保存并选择服务名称
您的 Automator 窗口应该如下所示: :screenshot 现在,您可以在 Finder 中选择多个文件,然后从“Services”子菜单执行您的服务。
对于您的脚本,我认为您想要以下操作。这会更改每个参数的目录,然后将其添加。我使用 for 循环,因为 Finder 允许您选择位于不同文件夹中的多个文件(可能位于不同的代码库中)。
for f in "$@"
do
    cd $(dirname $f); hg add $f 
done

如果你假设它们都在同一个代码库中,那么可以这样做:

cd $(dirname $1); hg add $@

2
Automator在一个环境中运行脚本,该环境设置了路径到/etc/paths(和可能的其他内容),但它不会调用你的~/.bash_profile。因此,如果您有一些路径定义需要从您的Automator脚本定位要执行的脚本/程序,您可以使用完整路径或将“source ~/.bash_profile”(无引号)添加为脚本的第一行。 - georg
“创建服务”选项已被删除,而“快速操作”或其他工作流似乎不再出现在上下文菜单中(即使放置在〜/ Lib / Services文件夹中)。 它们只会显示在“服务”菜单中。 有什么办法可以让它再次正常工作吗? - Demis

15

打开 Automator ,创建一个自定义工作流程。从 选择 实用工具,然后将 运行 shell 脚本 拖放到工作流程中。将 传递输入 设置为 作为参数。在脚本中编写:hg add $1。然后 文件菜单->另存为插件,指定名称,选择 Finder 插件保存。右键单击该文件,选择 更多->Automator-><PLUGIN_NAME>


哇,解释得非常好。虽然我找不到如何保存为插件,但我只能得到Workflow或Application选项。我正在运行OS 10.6.4。 - Petruza
在 Automator 的“文件”菜单中没有“另存为插件...”选项?我正在运行豹子系统,它在那里...即使没有“另存为插件”,我相信应该有相当的替代品。 - khachik
1
嗯,我发现在10.6中它被称为服务,但是它是一样的。我成功地创建了它,运行得很好,谢谢!现在的问题是我需要cd到%1文件的路径,你能告诉我如何获取吗?谢谢! - Petruza
嗯... (cd dirname "$1" && 做某事) ? - khachik
3
要让这个在Snow Leopard中工作,你需要在启动Automator时选择“新建 -> 服务”,而不是“新建 -> 工作流程”。然后,你可以使用“服务接收到选定的____在____中”控件来将该服务绑定到特定应用程序中的特定上下文菜单。其余步骤与本答案相同。 - aroth
显示剩余2条评论

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接