整个系统如何为某些文件类型设置图标?
例如,我有一个以.scala扩展名结尾的文本文件,并且我想为整个系统以及该扩展名的任何新创建的文件关联一个图标。
谢谢。
整个系统如何为某些文件类型设置图标?
例如,我有一个以.scala扩展名结尾的文本文件,并且我想为整个系统以及该扩展名的任何新创建的文件关联一个图标。
谢谢。
Answers:
文件类型的图标由Launch Services处理(该服务尤其确定哪个应用程序处理文件类型)。文件图标始终由默认情况下打开文件的应用程序处理提供。这样,例如“预览”默认提供PDF图标和PNG图标,但是如果您改为使用Pixelmator打开所有PNG文件,则这些文件随后将获得Pixelmator样式的图标。
您需要做的是将文件类型定义添加到默认情况下打开它的应用程序中,或者为文件类型创建自己的“虚拟”应用程序。
举例来说,我的系统尚不了解.scala
,因此我想对其TextMate
进行处理。
首先,我显示包内容的TextMate.app
,导航到Contents/
开放的Info.plist
,无论是用文本编辑器,或者Property List Editor
,苹果的开发者工具的一部分。
TextMate使用一种不寻常的格式Info.plist
(通常是二进制或XML),其摘录如下:
CFBundleDocumentTypes = (
{ CFBundleTypeName = "ADA source";
CFBundleTypeExtensions = (adb, ads);
CFBundleTypeIconFile = ADA;
},
父键CFBundleDocumentTypes
是我们想要的。它的第一个子元素用大括号括起来,包含文件类型定义,并带有名称(对于Finder中的文件类型列),文件扩展名和图标文件的名称(ADA
for TextMate.app/Contents/Resources/ADA.icns
)。
为了支持.scala
,我们需要在同一个父元素下添加一个与上述元素类似的兄弟元素CFBundleDocumentTypes
:
CFBundleDocumentTypes = (
{ CFBundleTypeName = "ADA source";
CFBundleTypeExtensions = (adb, ads);
CFBundleTypeIconFile = ADA;
},
{ CFBundleTypeName = "Scala source";
CFBundleTypeExtensions = (scala);
CFBundleTypeIconFile = ADA;
},
为简单起见,我使用的是相同的图标文件,但我们可以自己创建一个,然后将其复制TextMate.app/Contents/Resources/SCALA.icns
并引用到SCALA
中Info.plist
。
现在,如果正在运行,请关闭TextMate,将应用程序移动TextMate.app
到另一个文件夹,然后再次打开它。关闭它,然后将其移回,然后再次将其打开。这样做是为了启动服务可以选择Info.plist
我们刚刚执行的更改。
结果如下所示(请记住,我们为重复使用了TextMate Ada图标.scala
):
如果您不想将应用程序与打开.scala
文件相关联(无法想象为什么,但是有一种方法可以这样做):将文件的添加项更改为以下内容:
{ CFBundleTypeName = "Scala source";
CFBundleTypeExtensions = (scala);
CFBundleTypeIconFile = ADA;
CFBundleTypeRole = "None";
},
现在,该应用程序声明了文件类型,但告诉系统它不知道如何处理该文件(Apple提供了Finder声明字体类型的示例,尽管它无法自行打开它们)。
*请注意,对文件类型的任何永久性应用程序分配都将覆盖图标,可能是“未知文档”类型。
如果您已经具有与关联的应用程序.scala
,并且只想更改文件图标而不更改关联的应用程序:
打开应用程序Info.plist
,在中查找文件类型条目CFBundleDocumentTypes
,然后获取CFBundleTypeIconFile
。修改该文件,.../Contents/Resources/
此后不久应在Finder中反映出来。
奖金信息:
如何将单个文档或文件夹的图标更改为图像文件
假设您有一个~/Desktop/test.png
要使用图标的图像(这是上面的屏幕快照,用于说明.scala
/ TextMate / Ada图标的更改。
打开/Applications/Utilities/Terminal.app
并输入:
sips -i ~/Desktop/test.png
这会将test.png
文件图标更改为其图像。由于我喜欢递归,因此请尝试以下操作:
之前,是普通的预览png
图标(已禁用图像预览):
之后,图像文件本身就是其预览:
现在,我们可以打开文件的“ 获取信息”对话框,单击左上角的所需的将来的文档图标,Cmd-C
进行复制,打开文档文件的“ 获取信息”对话框,单击左上角的不需要的当前文档图标,然后Cmd-V
粘贴我们想要的图标。
或者,您可以在“预览”中打开要用作图标的图像文件,Cmd-A
选择全部,然后Cmd-C
将图像复制到剪贴板。然后打开目标文档的“ 获取信息”对话框,选择要在左上角更改的图标,然后Cmd-V
将图像粘贴到其上。
codesign --verify --verbose /Applications/TextMate.app
或类似的东西。如果无效,则不要对需要防火墙中有异常或需要钥匙串的应用程序执行此操作。我不确定弄乱签名还会导致其他问题。(详细信息+1!)
touch
捆绑软件的根目录来更新其修改日期。然后在Finder中,取消选择并重新选择应用程序/捆绑包/程序包,当它发现修改日期晚于Launch Services数据库中缓存的信息的修改日期时,它将重新注册它,从而识别出所有更改你做了。
TextMate.app: code object is not signed
我不想再经历一次。我怀疑这是一个真正的问题,但我没有想到。编辑:再三考虑,自定义键盘快捷键也存储在中Info.plist
。因此,如果不是那样的话,这实际上可能不是问题。唯一的问题可能是在应用程序捆绑包中添加了其他图标文件。
您需要在程序中替换ICNS文件,该程序被分配为特定文件类型的默认程序。
1-为所需的图标创建图像,然后另存为png文件类型(png支持透明度)。
2-将png文件转换为icns文件类型(FastIcns非常棒,它是免费的)。
3-CMD单击或右键单击设置为特定文件类型的默认应用程序的应用程序,然后选择“显示包内容”。
4-寻找应用程序指定为特定文件类型图标的icns文件,它可能位于名为Resources的文件夹中。
5-为您创建的icns文件命名,与您要替换的文件名称完全相同。
6-将创建的新icns文件复制并粘贴或拖放到要替换的icns文件所在的文件夹中,并在提供选项后选择“替换”。
7-完成!该文件类型的所有图标均已替换为所需的新图标。
我经常这样做的方法是找到带有该扩展名的文件,右键单击»获取信息,或Command-i,这将拉起信息面板。在顶部,您可以看到当前用于图像的图标。您可以将图像文件拖到该文件上进行更改,或者如果您复制了该图像,则可以单击要更改的图像并粘贴以进行更改。