4 votos

AppleScript: ¿Cómo comprobar si el portapapeles consta de un archivo (en lugar de texto)?

Si mi interpretación es correcta, hay dos tipos de contenidos que pueden ser copiados a la Mac global (todo el sistema) portapapeles:

  • text

o

  • file

Incluso a pesar de que son dos diferentes, los tipos de datos discretos, que comparten el mismo portapapeles. Por ejemplo, si usted tiene una imagen file en el portapapeles y, a continuación, copiar un text frase, la frase se sobrescribirá el archivo de imagen, y viceversa. Por favor me corrija si estoy equivocado.

Mi pregunta es, ¿cómo puedo determinar si el portapapeles no contiene text, usando AppleScript?

El contexto de mi pregunta es un AppleScript .scpt archivo que habla el texto seleccionado en el Sistema de Voz a un volumen especificado. El texto seleccionado se copiará en el portapapeles y, a continuación, el texto hablado a través de la say comando. La secuencia de comandos se activa mediante la pulsación de tecla a través de FastScripts.app.

Cada tan a menudo, me da un mensaje de error que dice "Número de Error: -1728." Este error se produce cuando, en lugar de text , se destaca, que he resaltado o selecciona una real file. Mac el Discurso de la función no se puede hablar de una file; expresión sólo puede verbalizar text.

Así que, me gustaría crear un if...then declaración en mi script para detectar este error. Idealmente, entonces me gustaría convertir el file a text, si es posible en la forma en que TextEdit.

2voto

user3439894 Puntos5883

Si el Portapapeles contiene un objeto de archivo, a continuación, clipboard info contendrá, por ejemplo, «class furl» (una dirección URL del archivo), junto con muchas otras clases.

El siguiente ejemplo de código se compruebe la presencia de «class furl» en la 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

Actualización:

Como mencioné en uno de mis comentarios, hay otras maneras de este código, y este enfoque devolverá un vacío lista o una lista que contiene una lista, que debe ser más rápido en lugar de los 14 que el primer ejemplo se devuelve si contiene un archivo. Si el Portapapeles no contienen un archivo, a continuación, la lista devuelta está vacía y errores, estableciendo cbFile a false, y si no está vacío, si se establece en true, que luego se comprueba en el ejemplo siguiente.

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

Por el camino, me encontré con la purge comando en la Terminal en medio de las pruebas de estos dos ejemplos y se sentía como el segundo ejemplo es un poco más rápido, sin embargo YMMV.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by: