2010-09-17 1 views
7

В настоящее время я изучаю проблему с невозможностью быстрого создания новых файлов в Finder. Я открою источник, что я пишу, потому что я думаю, что сообщество Mac нуждается в этом.Написание услуги Snow Leopard для Finder.app

В Windows вы можете щелкнуть правой кнопкой мыши, создать новый текстовый файл. OS X, вы должны быть в состоянии сделать это с помощью сервиса, который будет работать так:

  • Щелчок правой кнопкой мыши> Услуги> Создать новый текстовый файл

Дать Finder Service в Snow Leopard является теоретически, способ сделать это, хотя я не смог найти какой-либо пример кода. (Признаюсь, я только кратко посмотрел на документацию).

Я не уверен, с чего начать, предоставит ли Apple шаблон услуг в Xcode. В основном я ищу помощь при запуске рабочего проекта служб. Тогда код реализации должен быть довольно тривиальным для меня писать в Obj-C. Итак, что я могу сделать, чтобы создать новый рабочий сервис? Если я ошибаюсь в этом, то скажите мне правильный способ сделать это и, пожалуйста, укажите пример кода или несколько шагов, чтобы начать меня.

Редактировать: Поверьте мне, ребята, я не OS X noob. Попробовали много приложений, чтобы достичь работы: PathFinder, Automator, Terminal и т. Д., И я не доволен ни одним из них.

Я хочу создать элемент меню, который можно щелкнуть правой кнопкой мыши для создания новых файлов, как и Windows. Если этот API не позволяет мне это делать, тогда я при необходимости изменю системные файлы. Но я предпочел бы сделать это таким образом, чтобы не требовать, чтобы я взламывал OS X.

Печальный факт заключается в том, что Apple отключила сторонние контекстные пункты меню, когда Snow Leopard был выпущен, а разработчики были недовольны. Вы можете создавать службы в контекстном меню с помощью Automator, но это было очень ограничено.

Да, Quicksilver - это способ создания файлов на данный момент, если я не нахожусь в терминале, когда я touch ~/Desktop/file.txt или где угодно.

Если вы не можете ответить на мой вопрос, предоставив исходный код для проекта Xcode для написания Сервиса, пожалуйста, держите свое мнение о том, как я должен использовать свой компьютер для себя. Во всяком случае, я думаю, что, вероятно, буду отвечать на свой вопрос после того, как я пойду и осуществлю это сам.

ответ

13

Прочитано Services Implementation Guide. Если вы хотите, чтобы рабочий пример кода, см. this project Я приготовил. Как пояснили в руководстве, что вам нужно сделать, это установить обработчик службы:

- (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> 

Это так просто, как это! Возможно, вам потребуется вручную включить служебную запись в разделе «Ярлык клавиатуры» в System Preferences.app. Если вы хотите включить его автоматически, вы можете записать его в pbs.plist внутри Library/Preferences/, но это не документированный способ делать что-то.

Проблема заключается в том, что Finder не показывает этот служебный элемент, когда вы щелкните правой кнопкой мыши пустую область в окне Finder. Вы ничего не можете с этим сделать, кроме инъекции кода.Это связано с поддержкой Finder системой обслуживания. Если вы хотите изменить это поведение, вам нужно ввести код внутри Finder.app. Это не так сложно. На Snow Leopard стандартно использовать загрузочный трюк OSAX, описанный, например. in this blog post. Затем вы можете использовать функции времени выполнения Objective-C для исправления поведения щелчка правой кнопкой мыши Finder путем изменения описанных методов in this Apple document. (Я не знаю, какой из методов Finder использует для ответа на событие с щелчком правой кнопки мыши.)

Вместо этого, если вы в порядке, нажав кнопку на панели инструментов окна Finder вместо правой кнопки мыши, нажав, вы можете добавить кнопку, как в этой утилите cd-to. Это позволяет добавлять иконку приложения в панель инструментов Finder. Само приложение просто читает путь к первому окну Finder через события Apple и открывает для него окно терминала. Я думаю, вы можете настроить код этого приложения, чтобы делать то, что хотите.

Здесь следует субъективному питанию:

Честно говоря, вы не должен использовать Objective-C, чтобы написать службу Finder, если вы просто хотите, чтобы сделать новый файл. Automator может сделать то же самое со сценарием оболочки и/или с Applescript.

Если вы хотите эффективно управлять файлами на Mac, есть и другие полезные утилиты: попробуйте Butler или launchbar или Quicksilver, например.

+0

Автоматика ограничена. Он не позволяет создавать действие для создания нового текстового файла. Я точно забыл детали, но я попробовал это некоторое время назад и не смог этого добиться. Во всяком случае, я не хочу использовать Automator. Я хочу сделать это в коде. –

+0

@Yuji: «Откройте приложение из Dock или Spotlight». Это не один шаг. (1) Откройте приложение, (2) Command + S (3) Перетащите прокси окна поиска в диалоговое окно сохранения приложения. Иногда у меня есть Alt-Tab, зависящий от размеров окна и от того, какие приложения открыты (4) Нажмите enter, чтобы сохранить файл. ---- Не менее 4 шагов. –

+0

Вы попробовали действие «Запустить сценарий оболочки» в Automator? Вы можете делать все, что хотите. Automator передает имя папки сценарию оболочки. Скрипт оболочки - это код, не так ли? К сожалению, вы не можете щелкнуть правой кнопкой мыши пустую часть окна Finder, чтобы вызвать эту службу; вместо этого вам нужно щелкнуть правой кнопкой мыши папку, в которой вы хотите создать файл. Это ограничение, я думаю, не ограничение Automator, а ограничение самой системы обслуживания. – Yuji