2011-01-31 5 views
6

Я хотел бы добавить новый элемент на боковой панели Finder. Я узнал, что Finder хранит список «мест» в `~/Library/Preferences/com.apple.sidebarlists.plist. Я смог прочитать файл с использованием API Carbon и увидел, что у каждого элемента есть имя, значок и псевдоним.Добавить элемент на боковой панели Finder

Использование стороннего приложения, такого как PlistEdit Pro, я смог обновить псевдоним. Мой вопрос заключается в том, как обновить псевдоним, используя Carbon API. Не удалось найти способ создания псевдонима, который откроется в Finder. Кажется, что и Dropbox, и PlistEditor Pro смогли найти способ.


Edit: См обновленный 2015 ответ

ответ

6

Посмотрите here:

список общих файлов API является новым для Launch Services в Mac OS X Leopard. Этот API предоставляет доступ к нескольким видов системы глобального и для каждого пользователя постоянные списки файловой системы объектов, таких как последние документы и приложения, закладки и авторизации пунктов. Для получения дополнительной информации см. Новый файл интерфейса LSSharedFileList.h.

Вы хотите найти ключ kLSSharedFileListFavoriteItems, который обрабатывает элементы в разделе «Места» на боковой панели. Я думаю, вы могли бы попытаться сделать что-то похожее на this, используя LSSharedFileListCreate для создания kLSSharedFileListFavoriteItems.

Или вы могли бы использовать AppleScript отправил here, что было бы намного легче, но не «правильный путь» ©

+0

AppleScript способ работал 4 меня. thx – amitp

+0

@amitp Отлично! Думаю, тогда можно было бы выбрать мой ответ в качестве решения! :-) – Asmus

0

@Asmus: Под «Ctrl + T» по умолчанию является ярлык для добавления папки в боковой панели в искателе. Applescript, обозначенный u, отлично работает, когда клавиша быстрого вызова «команда + T» назначается вручную для других задач.

AppleScript завершается неудачно, если выполняется после установки команды '+ T' в качестве клавиши быстрого доступа, чтобы показать другой мой рабочий стол в OSX Lion (10,7)

3

Обновление 2015

Заголовок LSSharedFileList говорит, что это переместилось в рамки CoreServices. Фактически, если вы Cmd-Shift-O (в Xcode) и введите LSSharedFileList, перейдите к единственному результату, вы увидите в панели перехода, что заголовок действительно теперь содержится в пределах CoreServices.framework. В любом случае ключ остается kLSSharedFileListFavoriteItems.

Пример:

+ (BOOL)appendFavoriteItemWithURL:(NSURL *)url { 

    // Pessimism ... 
    BOOL result = NO; 

    // Do we have a file URL? 
    if (url.isFileURL) { 

    // Ask CoreServices for the favorite items list 
    // (kLSSharedFileListFavoriteItems) 
    LSSharedFileListRef list = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL); 
    if (list) { 

     // We've got the list, so try to append our item 
     // (use kLSSharedFileListItemBeforeFirst vs. 
     // kLSSharedFileListItemLast if desired) 
     LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(list, 
            kLSSharedFileListItemLast, 
            NULL, 
            NULL, 
            (__bridge CFURLRef)url, 
            NULL, 
            NULL); 

     // Did it work? 
     if (item) { 

     // Release the item and flag success 
     CFRelease(item); 
     result = YES; 

     } 

     // Release the list 
     CFRelease(list); 

    } 

    } 

    return result; 
} 

Использование:

// Create the path to the favorite item to add 
NSString * itemPath = [@"~/Music" stringByExpandingTildeInPath]; 
NSURL * itemURL = [NSURL fileURLWithPath:itemPath]; 

// Insert the item 
[WhateverClassTheAboveFunctionIsIn appendFavoriteItemWithURL:itemURL]; 
+1

Я создал этот Gist, который обертывает эту функциональность в простую категорию NSURL: https: //gist.github.com/jnozzi/817f3276c55dbb7025be –

+0

Up-voted, мне нравится это решение, но стыдно, что некоторые из этих функций теперь устарели на 10.11. Любая идея, что использовать вместо этого? –

+0

В настоящее время, Бен. Являются ли устаревшие методы аннотированными в заголовках? Они могут предложить альтернативы. –

Смежные вопросы