AppleScript: come verificare se gli appunti sono costituiti da un file (anziché da testo)?

5

Se la mia comprensione è corretta, ci sono due tipi di contenuti che possono essere copiati negli appunti globali (a livello di sistema) Mac:

  • text

o

  • file

Anche se sono due diversi tipi di dati discreti, condividono gli stessi appunti. Ad esempio, se hai un'immagine di file negli appunti e quindi copi una frase text , la frase sovrascriverà il file immagine e viceversa. Per favore correggimi se sbaglio.

La mia domanda è: come posso determinare se gli appunti non contengono text , usando AppleScript?

Il contesto della mia domanda è un file .scpt di AppleScript che parla il testo selezionato in System Voice ad un volume specificato. Il testo selezionato viene copiato negli Appunti, quindi il testo viene pronunciato tramite il comando say . Lo script viene attivato tramite la pressione di un tasto tramite FastScripts.app.

Ogni tanto mi viene data una finestra di errore che indica "Numero errore: -1728". Questo errore si verifica quando, invece di text , viene evidenziato, ho evidenziato o selezionato un file effettivo. La funzione vocale di Mac non può pronunciare un file ; Il discorso può solo verbalizzare text .

Quindi, vorrei creare un'istruzione if...then nel mio script per rilevare questo errore. Idealmente, vorrei quindi convertire il file in text , se possibile nel modo in cui TextEdit lo fa.

    
posta rubik's sphere 26.04.2017 - 04:24
fonte

1 risposta

3

Se gli Appunti contengono un oggetto file , clipboard info conterrà, ad es., «class furl» (un URL di file), insieme a molte altre classi.

L'esempio seguente code controllerà la presenza di «class furl» in clipboard info :

if ((clipboard info) as string) contains "«class furl»" then
    say "the clipboard contains a file named " & (the clipboard as string)
else
    say "the clipboard does not contain a file"
end if

Aggiornamento:

Come ho detto in uno dei miei commenti, ci sono altri modi per codificarlo, e questo approccio restituirà un elenco vuoto o un elenco contenente uno lista , che dovrebbe essere più veloce invece del 14 che il primo esempio restituisce se contiene un file . Se gli Appunti non contengono un file , allora l' elenco restituito è vuoto e si verifica un errore, l'impostazione di cbFile su false , e se non è vuota, impostandola a true , che viene quindi confrontato nell'esempio seguente.

try
    (item 1 of (clipboard info for «class furl»))
    set cbFile to true
on error
    set cbFile to false
end try
if cbFile then
    say "the clipboard contains a file named " & (the clipboard as string)
else
    say "the clipboard does not contain a file"
end if

A proposito, ho eseguito il comando purge command in Terminal tra testare questi due esempi e mi sono sentito come se il secondo esempio fosse un po 'più veloce, comunque YMMV.

    
risposta data 26.04.2017 - 06:04
fonte

Leggi altre domande sui tag