Як встановити значок для типу файлу на Mac?


42

Як встановити піктограму для деяких типів файлів, продуманих цілою системою?

Наприклад, у мене є текстові файли, які закінчуються розширенням .scala, і я хочу пов’язати значок для цих файлів через усю систему та будь-який новостворений файл цього розширення.

Дякую.


Щойно помітив, що ви MAC ... але все одно, в Windows ви б змінили програму за замовчуванням, пов’язану з цим типом файлів. Потім файл набирає значок цієї програми.
MrWhite

12
@ w3d: Він не на MAC, він на Mac.
Wuffers

Відповіді:


41

Піктограми для типів файлів обробляються послугами Launch Services (сервісом, серед іншого, визначає, яка програма обробляє тип файлу). Піктограма файлу завжди надається програмою, що відкриває файл за замовчуванням. Таким чином, наприклад, попередній перегляд надає піктограми PDF за замовчуванням та піктограми PNG, але якщо ви зміните всі файли PNG для відкриття за допомогою Pixelmator, ці файли отримують піктограму піксельматорського стилю.

Що потрібно зробити, це додати визначення типу файлу до програми, яка відкриває його за замовчуванням, або створити власний "фіктивний" додаток для типу файлу .


Як приклад, моя система ще не знає про це .scala, і я хочу TextMateз цим впоратися.

По- перше, я Show Package Contents з TextMate.app, перейдіть Contents/і відкриті Info.plist, або за допомогою текстового редактора, або Property List Editor, частина інструментів розробника Apple.

TextMate використовує незвичайний формат для Info.plist(зазвичай це двійковий або XML), уривок якого виглядає приблизно так:

CFBundleDocumentTypes = (
    {   CFBundleTypeName = "ADA source";
        CFBundleTypeExtensions = (adb, ads); 
        CFBundleTypeIconFile = ADA; 
    },

Батьківський ключ CFBundleDocumentTypes- це те, що ми хочемо. Перший дочірній елемент його, укладений у фігурні фігурні дужки, містить визначення типу файлу, доповненого іменем (для стовпця типу файлу в Finder), розширеннями файлів та назвою файлу значків ( ADAдля 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в іншу папку та відкрийте її знову. Закрийте його та перемістіть назад, а потім знову відкрийте. Це робиться для того, щоб послуги Launch Services вибирали зміни, які Info.plistми тільки що виконували.

Результат виглядає приблизно так (пам’ятайте, ми знову використовували піктограму TextMate Ada .scala):

alt текст

Якщо ви не хочете пов’язувати програму для відкриття .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значок попереднього перегляду (попередній перегляд зображення відключений):

alt текст

Після цього сам файл зображення - його попередній перегляд:

alt текст

Тепер ми можемо відкрити діалогове вікно « Інформація про файл» , натиснути потрібний, майбутній значок документа у верхньому лівому куті, Cmd-Cскопіювати його, відкрити діалогове вікно « Інформація про файл документа» , натиснути небажаний, поточний значок документа у верхньому лівому куті та Cmd-Vвставити папку значок, який ми хочемо.


Ви також можете відкрити файл зображення, який ви хочете використовувати як піктограму в режимі попереднього перегляду, Cmd-Aщоб вибрати всі, Cmd-Cскопіювати зображення у буфер обміну. Потім відкрийте діалогове вікно " Інформація про цільовий документ" , виберіть піктограму, яку потрібно змінити у верхньому лівому куті, та Cmd-Vнаклейте на неї зображення.


2
Одне, що потрібно перевірити: чи визнає це недійсним цифровий підпис програми? codesign --verify --verbose /Applications/TextMate.appабо щось подібне. Якщо їх визнано недійсним, тоді не робіть цього для програм, для яких потрібні винятки в брандмауері або потрібен брелок. Я не впевнений, що ще може піти погано, псуючи підпис. (+1 докладно!)
Арджан

1
Edit БАХ, я знежирений в перший раз і не бачив свій альтернативний метод для примусового поновлення LS. Мех, FWIW: лише одна зміна після зміни програми (або будь-якого пакета / пакета) Info.plist: вам, швидше за все, знадобиться touchкореневий рівень пакета, щоб оновити дату його зміни. Потім у Finder видаліть і повторно виберіть додаток / пакет / пакет, і коли він помітить, дата модифікації пізніше, ніж дата кешованої інформації в базі даних Launch Services, вона перереєструє її, тим самим визнаючи будь-які зміни ви зробили.
NSGod

1
@Arjan У вас є пункт. На жаль, TextMate.app: code object is not signedі я не хочу повторювати це знову. Я підозрюю, що це справжня проблема, я про це не думав. Редагувати . По-друге, в меню також зберігаються спеціальні комбінації клавіш Info.plist. Тож насправді це не може бути проблемою, якщо це не так. Єдиним питанням може бути додавання додаткового файлу значків у комплект програми.
Даніель Бек

1
Я використовував абсолютно той самий метод (хоча внесення змін у xml Info.plist Sublime Text). Як результат, асоціація файлів спрацювала, але це не змінило значок асоційованого файлу. Будь-яка ідея, чому це не працює?
gfrigon

2
Трохи запізнюємось на вечірку, але я повинен погодитися з @Arjan. Якщо у вас є додаток з кодом, наприклад, скажімо, о, я не знаю, ... Xcode ... він насправді скаже вам, що програма пошкоджує, видалити її та повторно завантажити її з App Store. Що мені дуже не подобається - це те, як такі програми, як Enthought Canopy, викрадають усі піктограми розширень для себе. Apple дійсно повинен мати це так, коли ви встановлюєте редактор за замовчуванням для типу файлу, в який входить система, і вносить усі необхідні зміни в такі речі, як асоціація додатків.
AMR

1

Вам потрібно замінити файл ICNS всередині програми, призначеної як програма за замовчуванням для конкретного типу файлу.

1 - Створіть зображення для потрібної піктограми, а потім збережіть у вигляді файлу png (png підтримує прозорість).

2 - Перетворіть файл png у тип файлу icns (FastIcns досить великий і це безкоштовно).

3 - Клацніть правою кнопкою миші або клацніть правою кнопкою миші програму, яку встановлено як додаток за замовчуванням для певного типу файлів, а потім виберіть показ вмісту пакета.

4 - Шукайте файл icns, який програма позначає як значок для певного типу файлу, ймовірно, він буде знаходитися в папці під назвою Ресурси.

5 - Назвіть створений вами файл icns, точно таке ж ім'я файлу, як і той, який ви хочете замінити.

6 - Скопіюйте та вставте або перетягніть новий створений вами файл icns у папку, в якій знаходиться той, який ви хочете замінити, та виберіть заміну, коли вам надана можливість.

7 - Ви закінчили! Усі піктограми цього типу файлів були замінені на новий бажаний значок.


До якої версії OSX відповідає ця відповідь ... просто для того, щоб позначити час, коли метод неминуче змінюється.
JoshP

0

Я завжди займаюся цим, щоб знайти файл із цим розширенням, клацніть правою кнопкою миші »Отримати інформацію або Command-i, і це підніме панель інформації. Угорі бачите значок, який зараз використовується для зображення. Ви можете перетягнути файл зображення до цього, щоб змінити його, або якщо ви скопіювали зображення, ви можете натиснути на зображення, яке ви хочете змінити, і зробити пасту, щоб змінити його.


Дивіться також зображення на сторінці Як я можу змінити піктограму програми в Mac OS X? та зауважте, що будь-яке зображення, яке ви можете відкрити в режимі попереднього перегляду, може використовуватися як значок, відкриваючи його в «Попередній перегляд», вибираючи його та копіюючи за допомогою Command-C. Це помістить зображення у буфер обміну, що містить формат, який також використовується як значок. Потім виберіть існуючу піктограму та вставте буфер обміну за допомогою Command-V.
Ар'ян

3
Це не працює. Коли я перетягую .PNG файл до зображення на екрані інформації, я отримую значок PNG, а не зображення на PNG. І він змінює конкретний файл, а не всі файли з однаковим розширенням по всій системі.
Еран Кампф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.