Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为Finder.app编写雪豹服务_Objective C_Cocoa_Osx Snow Leopard_Application Design - Fatal编程技术网

Objective c 为Finder.app编写雪豹服务

Objective c 为Finder.app编写雪豹服务,objective-c,cocoa,osx-snow-leopard,application-design,Objective C,Cocoa,Osx Snow Leopard,Application Design,我目前正在研究解决无法在Finder中快速创建新文件的问题。我会把我写的东西开源,因为我认为Mac社区需要解决这个问题 在Windows上,您可以右键单击,创建新的文本文件。 在OS X中,您应该能够使用如下工作方式的服务完成此操作: 右键单击>服务>创建新文本文件 理论上,用SnowLeopard编写Finder是实现这一点的方法,尽管我还没有找到任何示例代码。(我承认我只是简单地看了一下文档) 我不知道如何开始,苹果是否在Xcode中提供了服务模板。基本上,我正在寻求帮助,让一个工作服务

我目前正在研究解决无法在Finder中快速创建新文件的问题。我会把我写的东西开源,因为我认为Mac社区需要解决这个问题

在Windows上,您可以右键单击,创建新的文本文件。 在OS X中,您应该能够使用如下工作方式的服务完成此操作:

  • 右键单击>服务>创建新文本文件
理论上,用SnowLeopard编写Finder是实现这一点的方法,尽管我还没有找到任何示例代码。(我承认我只是简单地看了一下文档)

我不知道如何开始,苹果是否在Xcode中提供了服务模板。基本上,我正在寻求帮助,让一个工作服务项目运行。对于我来说,用Obj-C编写实现代码应该是相当简单的。那么我可以做些什么来创建一个新的working Services项目呢?如果我错了,那么告诉我正确的方法,请提供示例代码或一些步骤让我开始

编辑:相信我,伙计们,我不是一个OSXnoob。我已经尝试了许多应用程序来实现变通方法:探路者、自动机、终端等等,但我对它们都不满意

我想创建一个可右键单击的菜单项,用于创建新文件,与Windows相同。如果这个API不允许我这样做,那么我将在必要时修改系统文件。但我宁愿这样做,不需要我黑客操作系统X

可悲的事实是,当雪豹发布时,苹果禁用了第三方上下文菜单项,开发人员不高兴。您可以使用Automator在上下文菜单下创建服务,但它非常有限

是的,Quicksilver是我目前创建文件的方式,除非我在终端中触摸桌面/file.txt或其他任何地方

如果你不能通过提供Xcode项目的源代码来回答我的问题,请保留你对我应该如何使用我的电脑的看法。无论如何,我想在我自己去实现它之后,我可能会回答我自己的问题。

阅读。如果您想要一个工作的示例代码,请参阅我编写的。如指南中所述,您需要做的是安装服务处理程序:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [NSApp setServicesProvider:self];
    NSUpdateDynamicServices();
}

- (void)handleServices:(NSPasteboard *)pboard
          userData:(NSString *)userData 
         error:(NSString **)error {
    if([[pboard types] containsObject:NSFilenamesPboardType]){
        NSArray* fileArray=[pboard propertyListForType:NSFilenamesPboardType];
            // do something...
    }
}
并在您的
Info.plist
中发布:

<key>NSServices</key>
<array>
    <dict>
        <key>NSMenuItem</key>
        <dict>
            <key>default</key>
            <string>Service Handling Demo</string>
        </dict>
        <key>NSMessage</key>
        <string>handleServices</string> <!-- This specifies the selector -->
        <key>NSPortName</key>
        <string>services</string>       <!-- This is the name of the app -->
        <key>NSSendTypes</key>
        <array>
            <string>NSFilenamesPboardType</string>
        </array>
    </dict>
</array>
NSServices
. 然后,您可以使用Objective-C运行时函数通过更改所描述的方法来修补查找程序右键单击的行为。(不过,我不知道Finder使用哪种方法响应右键单击事件。)

相反,如果您可以单击Finder窗口工具栏上的按钮而不是右键单击,则可以添加一个按钮,如本实用程序所示。这使用了将应用程序图标放到Finder工具栏的功能。应用程序本身只是通过Apple events读取最前面的Finder窗口的路径,并为此打开一个终端窗口。我想你可以调整这个应用程序的代码来做你想做的事情

以下是一些主观的东西:

老实说,如果您只想创建一个新文件,就不必使用Objective-C编写查找服务。Automator可以使用shell脚本和/或Applescript执行相同的操作


如果你想在Mac电脑上高效地管理文件,已经有很多实用工具:例如,try或or。

Automator是有限的。它不允许您创建用于创建新文本文件的操作。我完全忘记了细节,但不久前我尝试过,但无法实现这一点。不管怎样,我不想用自动机。我想在代码中这样做。@Yuji:“从Dock或聚光灯打开应用程序。”这不是一步。(1) 打开应用程序,(2)命令+S(3)将finder窗口的代理拖动到应用程序保存对话框。有时,我必须根据窗口大小和打开的应用程序选择Alt Tab键(4)按enter键保存文件。---至少4个步骤。您是否在Automator中尝试了“运行shell脚本”操作?你可以用它做任何你想做的事。自动机将文件夹名称传递给shell脚本。shell脚本是一种代码,对吗?不幸的是,您不能右键单击Finder窗口的空白部分来调用该服务;相反,您需要右键单击要在其中创建文件的文件夹。我认为,这个限制不是Automator的限制,而是服务系统本身的限制。至于你的第二个评论,你首先决定在哪个目录中创建文件和名称?你为什么不先处理一下这个无标题的文件呢?当您打开应用程序时,是否立即执行(2)、(3)和(4)?每个人都有自己的方式…右击?使用鼠标?多么复古!我想我会坚持在Quicksilver或LaunchBar中按一两下键盘。