【问题标题】:How can I conditionally color files and folders in the OS X Finder?如何在 OS X Finder 中有条件地为文件和文件夹着色?
【发布时间】:2011-02-16 06:09:28
【问题描述】:

我想根据 finder 中的某些条件为徽章文件和文件夹着色,在 Mac OS X 10.6 中实现此目的的方法是什么

我已经检查了这个问题:这仅谈论查找器中的上下文菜单 Finder Plugin in Snow Leopard

我什至检查过:http://scplugin.tigris.org/ 即使他们没有在 10.6 中进行颜色标记,这是待处理的任务。

提前感谢您的所有帮助

【问题讨论】:

  • 对于投票关闭的人,我相信用户正在尝试以编程方式执行此操作,所以这并不是 superuser.com 的真正问题。这个问题模棱两可,但它被标记为“可可”。
  • 我使用图标服务找到了解决方案。将颜色作为图标和徽章图标加载到相应的文件或文件夹中。感谢大家的帮助。

标签: objective-c cocoa macos


【解决方案1】:

您可以使用在 Mac OS X 10.6 中引入的 URL 资源 API。

NSURL* fileURL = [NSURL fileURLWithPath:@"/Path/to/file"];

id labelValue = nil;
NSError* error;
if([fileURL getResourceValue:&labelValue forKey:NSURLLabelNumberKey error:&error])
{
    NSLog(@"The label value is %@",labelValue);
}
else
{
    NSLog(@"An error occurred: %@",[error localizedDescription]);
}

您既可以使用NSURLLabelNumberKey 来获取Finder 分配标签的编号,也可以使用NSURLLabelColorKey 来获取实际颜色。

您可以使用相应的方法设置标签值:

- (BOOL)setResourceValue:(id)value forKey:(NSString *)key error:(NSError **)error

【讨论】:

  • 这不适用于 10.9 中引入的新标签,不是吗?我的意思是添加或删除任何数量的新自定义标签,因为它可以在 Finder 中。毕竟,LabelValue 只是旧 FinderLabel 的索引。
  • @ThomasTempelmann 你可以使用NSURLTagNamesKey 键。
【解决方案2】:

对于任何仍然需要这个问题的答案的人,你去吧。

NSURL *fileURL = [NSURL fileURLWithPath:path_to_file];
NSError *error;
id labelColor = nil;

[fileURL setResourceValue:@2 forKey:NSURLLabelNumberKey error:&error]; //Set tag/label to green
[fileURL setResourceValue:@6 forKey:NSURLLabelNumberKey error:&error]; //Set tag/label to red

Garrett Hyde 的顺序正确。

//  0 none, 1 grey, 2 green, 3 purple, 4 blue, 5 yellow, 6 red, 7 orange

以上代码已使用 Xcode 4.6.3 和 OSX 10.9.2 Mavericks 测试。

【讨论】:

  • 谢谢!这正是我想要的。确认它可以在 macOS Catalina 10.15.5 上运行。
【解决方案3】:

不幸的是,没有公开的 API。您需要在 Finder 中注入代码并对其进行修补。

在 10.6 之前,只需使用 InputManagers 就可以很容易地将代码注入 Cocoa 应用程序。这不再是真的,但您可以使用OSAX 做到这一点,请参阅this blog postSIMBL 会自动执行此操作。

但你必须弄清楚Finder 内部发生了什么,才能了解如何修补。 要探索Finder 的内部,F-Script anywhere 将为您提供帮助。

玩得开心,祝你好运!

【讨论】:

  • 10.6 及更高版本中有一个公共 API,请参阅我的回答。使用 AppleScript 是早期操作系统版本的解决方案。
  • Rob Keniger:有一个公共 API 可以从另一个应用程序设置标签颜色,但如果目标是让 Finder 自己完成工作,则需要 SIMBL 或 mach_inject 将代码注入 Finder 进程.
  • 感谢 Rob,学习新的 API 总是很愉快。我想我需要更仔细地阅读 API deltas...
  • @Peter:我猜一个后台应用程序会定期检查 Finder 的最前面的窗口并通过FSEvents 监视目录会完成这项工作......
  • 感谢您的帮助...作为一个实验,我正在尝试使用 SIMBL 进行此操作...有没有半成品的解决方案可以看看?
【解决方案4】:

你需要applescript。因此,您可以使用脚本桥或 NSApplescript 在可可中编写 Finder 脚本。这是一个简单的applescript来展示如何做到这一点。

set a to (choose file)
tell application "Finder"
    -- label colors
    -- 0 none, 1 orange, 2 red, 3 yellow, 4 blue, 5 purple, 6 green, 7 grey
    set label index of a to 6
end tell

【讨论】:

    【解决方案5】:

    我认为NSURLLabelNumberKey 的值是:

    //  0 none, 1 grey, 2 green, 3 purple, 4 blue, 5 yellow, 6 red, 7 orange
    

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 2011-10-19
      • 2011-01-26
      • 2021-07-16
      • 2015-02-22
      • 2010-11-20
      • 2015-06-11
      • 2011-10-29
      • 2015-08-26
      相关资源
      最近更新 更多