2010-09-17 18 views
7

Attualmente sto cercando di risolvere il problema con l'impossibilità di creare rapidamente nuovi file nel Finder. Aprirò ciò che scrivo perché penso che la comunità Mac abbia bisogno di questa soluzione.Scrivere un servizio Snow Leopard per Finder.app

Su Windows, è possibile fare clic con il tasto destro del mouse, creare un nuovo file di testo. OS X, si dovrebbe essere in grado di fare questo con un servizio che dovrebbe funzionare in questo modo:

  • Right-Click> Servizi> Crea nuovo file di testo

Scrivi Finder Service in Snow Leopard è teoricamente il modo per farlo, anche se non sono stato in grado di trovare alcun codice di esempio. (Ammetto che ho solo esaminato la documentazione molto brevemente).

Non sono sicuro di come iniziare, se Apple fornisce un modello di servizi in Xcode. Fondamentalmente sto cercando aiuto per far funzionare un progetto di servizi di lavoro. Il codice di implementazione dovrebbe quindi essere piuttosto banale per me scrivere in Obj-C. Quindi cosa posso fare per creare un nuovo progetto di servizi di lavoro? Se ho torto su questo, allora dimmi il modo giusto per farlo e ti preghiamo di fornire codice di esempio o alcuni passaggi per iniziare.

Modifica: Fidati, ragazzi, non sono un OS X noob. Ho provato molte app per ottenere risultati: PathFinder, Automator, Terminal, ecc. E sono contento di nessuno di loro.

Voglio creare una voce di menu selezionabile con il tasto destro per creare nuovi file, lo stesso di Windows. Se questa API non mi consente di farlo, modificherò i file di sistema, se necessario. Ma preferirei farlo in modo tale da non richiedere l'hacking di OS X.

Il fatto triste è che Apple ha disattivato le voci di menu contestuali di terze parti quando Snow Leopard è stato rilasciato e gli sviluppatori non erano felici. Potresti creare servizi nel menu contestuale con Automator, ma era molto limitato.

Sì, Quicksilver è il modo in cui creo i file al momento, a meno che non sia nel terminale quando I touch ~/Desktop/file.txt o dovunque.

Se non è possibile rispondere alla mia domanda fornendo un codice sorgente per un progetto Xcode per la scrittura di un servizio, si prega di mantenere le proprie opinioni su come dovrei usare il mio computer per conto proprio. Ad ogni modo, penso che probabilmente risponderò alla mia domanda dopo che me ne andrò e me ne occuperò io stesso.

risposta

13

Leggi Services Implementation Guide. Se vuoi un codice di esempio funzionante, vedi this project che ho preparato. Come spiegato nella guida, che cosa dovete fare è installare il gestore del servizio:

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

e pubblicizzare nel vostro 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> 

E 'facile come questo! Potrebbe essere necessario attivare manualmente la voce di servizio nella sezione Tasti di scelta rapida di System Preferences.app. Se si desidera accenderlo automaticamente, è possibile scrivere in pbs.plist all'interno di Library/Preferences/, ma questo non è un modo documentato di fare le cose.

Il problema è che Finder non mostra questo elemento di servizio quando si fa clic con il pulsante destro del mouse su un'area vuota nella finestra del Finder. Non puoi farci niente, a parte l'iniezione del codice.Questo è inerente al supporto del Finder del sistema di servizio. Se vuoi cambiare questo comportamento, devi inserire il codice all'interno di Finder.app. Non è così difficile. Su Snow Leopard, è normale utilizzare il trucco di caricamento OSAX, descritto ad es. in this blog post. Quindi è possibile utilizzare le funzioni di runtime Objective-C per correggere il comportamento del clic con il pulsante destro del Finder, modificando i metodi descritti in this Apple document. (Non so quale metodo utilizzi Finder per rispondere all'evento del clic destro, però.)

Invece, se stai facendo clic con un pulsante sulla barra degli strumenti della finestra del Finder invece di destra- cliccando, puoi aggiungere un pulsante, come in questa utility cd-to. Questo utilizza la possibilità di inserire un'icona dell'app nella barra degli strumenti del Finder. L'app stessa legge semplicemente il percorso della finestra del Finder in primo piano tramite gli eventi Apple e apre una finestra Terminale per quello. Penso che tu possa modificare il codice di questa app per fare ciò che vuoi.

Seguono gli animali soggettive:

Onestamente, non c'è bisogno di utilizzare Objective-C per scrivere un servizio di ricerca, se si desidera solo per fare un nuovo file. Automator può fare la stessa cosa con uno script di shell e/o con Applescript.

Se si desidera gestire i file in modo efficiente su Mac, ci sono già grandi utility in giro: prova Butler o launchbar o Quicksilver, per esempio.

+0

L'automazione è limitata. Non ti consente di creare un'azione per la creazione di un nuovo file di testo. Ho dimenticato esattamente i dettagli, ma l'ho provato qualche tempo fa e non sono riuscito a ottenere ciò. Ad ogni modo, non voglio usare Automator. Voglio farlo in codice. –

+0

@Yuji: "Apri l'app dal Dock o Spotlight." Questo non è un passo. (1) Apri app, (2) Comando + S (3) Trascina il proxy della finestra del Finder nella finestra di dialogo App save. A volte devo modificare Alt-Tab sulle dimensioni delle finestre e su quali app sono aperte (4) Premere invio per salvare il file. ---- Almeno 4 passaggi. –

+0

Hai provato l'azione "Esegui script shell" in Automator? Puoi fare quello che vuoi con esso. Automator passa il nome della cartella allo script della shell. Uno script di shell è un codice, giusto? Purtroppo non è possibile fare clic con il pulsante destro del mouse sulla parte vuota della finestra del Finder per richiamare quel servizio; invece è necessario fare clic con il pulsante destro del mouse su una cartella in cui si desidera creare un file. Questa restrizione è, penso, non una limitazione di Automator, ma è una limitazione del sistema di servizi stesso. – Yuji

Problemi correlati