Как добавить действие команды «открыть с помощью» в OS X - PullRequest
1 голос
/ 01 марта 2011

В Finder, используя «Открыть с помощью» в меню правой кнопки мыши, я хочу открыть текстовый файл с помощью команды xterm -e vim.

Может кто-нибудь сказать мне, как это сделать?

1 Ответ

3 голосов
/ 02 марта 2011

Создайте новый проект приложения какао.

  • Добавьте этот код в файл делегата приложения .m:

.

- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename {

    [NSTask launchedTaskWithLaunchPath:@"/usr/X11/bin/xterm" arguments:[NSArray arrayWithObjects:@"-e", @"/usr/bin/vim", filename, nil]];
    exit(0);

    return YES;
}
  • Сконфигурируйте ваше приложение как фоновое приложение, добавив ключ LSBackgroundOnly в ваш plist-файл и установите его значение YES:

    <key>LSBackgroundOnly</key>
    <true/>
    
  • Зарегистрируйтесь, чтобы иметь возможность открывать текстовый файл, добавив его в свой список:

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeName</key>
            <string>Plain text document</string>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>text</string>
                <string>txt</string>
                <string>utf8</string>
            </array>
            <key>CFBundleTypeIconFile</key>
            <string>TEXT</string>
            <key>CFBundleTypeMIMETypes</key>
            <array>
                <string>text/plain</string>
            </array>
            <key>CFBundleTypeOSTypes</key>
            <array>
                <string>TEXT</string>
                <string>sEXT</string>
                <string>ttro</string>
            </array>
        </dict>
    

  • Откройте файл MainMenu.xib и снимите флажок «Видимо при запуске» вашего окна.

Вы сделали. Построить. Вам может понадобиться открыть его один раз в Finder, чтобы Launch Services узнал об этом.

Затем в Finder можно щелкнуть правой кнопкой мыши текстовый файл и в меню «Открыть с помощью…» выбрать приложение, как на скриншоте:

enter image description here

...