2011-01-31 9 views
6

Vorrei aggiungere un nuovo elemento alla barra laterale del Finder. Ho scoperto che il Finder mantiene la lista dei "luoghi" in ~ ~/Library/Preferences/com.apple.sidebarlists.plist. Sono stato in grado di leggere il file utilizzando Carbon API e ho visto che ogni oggetto aveva nome, icona e alias.Aggiungi elemento alla barra laterale del Finder

Utilizzando un'applicazione di terze parti come PlistEdit Pro sono riuscito ad aggiornare l'alias. La mia domanda è come aggiornare l'alias usando Carbon API. Non è stato possibile trovare un modo per creare alias che si aprirà in Finder. Sembra che sia Dropbox sia PlistEditor Pro siano stati in grado di trovare la strada.


Edit: Vedere aggiornato 2015 risposta

risposta

6

Date un'occhiata here:

L'elenco dei file API in comune è nuovo a Launch Services in Mac OS X Leopard. Questa API fornisce l'accesso a diversi tipi di sistema globale e per utente liste persistenti di file system oggetti, ad esempio documenti recenti e applicazioni, preferiti e accedere oggetti. Per i dettagli, consultare il nuovo file di interfaccia LSSharedFileList.h.

Si desidera cercare la chiave kLSSharedFileListFavoriteItems, che gestisce gli elementi in "Luoghi" nella barra laterale. Immagino che potresti provare a fare qualcosa di simile a this, usando LSSharedFileListCreate per creare kLSSharedFileListFavoriteItems.

Oppure si potrebbe usare l'AppleScript postato here, che sarebbe modo più semplice, ma non il "modo giusto" ©

+0

Il modo in cui ha funzionato AppleScript 4 me. grazie – amitp

+0

@amitp Ottimo! Immagino che possa selezionare la mia risposta come soluzione allora! :-) – Asmus

0

@Asmus: Con 'Command + T' impostazione predefinita è la scorciatoia per aggiungere una cartella to sidebar nel cercatore Applescript puntato da te funziona bene quando il tasto di scelta rapida della tastiera 'comando + T' viene assegnato manualmente ad altre attività.

AppleScript non riesce se eseguita dopo l'impostazione 'Command + T' come il tasto di scelta rapida per mostrare la mia altra desktop in leone osx (10,7)

3

Aggiornamento per 2015

L'intestazione LSSharedFileList dice che questo è stato spostato nel framework CoreServices. Infatti, se si Cmd-Shift-O (in Xcode) e si digita LSSharedFileList, quindi si passa all'unico risultato, nella barra di scorrimento si vedrà che l'intestazione è effettivamente contenuta in CoreServices.framework. In ogni caso, la chiave è ancora kLSSharedFileListFavoriteItems.

Esempio:

+ (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; 
} 

Usage:

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

Ho creato questo Gist che avvolge questa funzionalità in una semplice categoria NSURL: https: //gist.github.com/jnozzi/817f3276c55dbb7025be –

+0

Up-votato, mi piace questa soluzione, ma è un peccato che alcune di quelle funzioni siano ora deprecate il 10.11. Qualche idea su cosa usare invece? –

+0

Non al momento, Ben. I metodi deprecati sono annotati nelle intestazioni? Possono suggerire le alternative. –