8 votos

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

Si lo he entendido bien, hay dos tipos de contenido que pueden ser copiados al portapapeles global (de todo el sistema) de Mac:

  • text

o

  • file

A pesar de que son dos tipos de datos diferentes y discretos, comparten el mismo portapapeles. Por ejemplo, si tienes una imagen file en tu portapapeles, y luego copias un text la frase, la frase sobreescribirá el archivo de la imagen, y viceversa. Por favor, corrígeme si me equivoco.

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

El contexto de mi pregunta es un archivo AppleScript .scpt que dice el texto seleccionado en la Voz del Sistema a un volumen específico. El texto seleccionado se copia en el portapapeles, y luego el texto es hablado a través del say comando. El script se activa al pulsar una tecla a través de FastScripts.app.

De vez en cuando, se me da un diálogo de error que dice, "Número de error: -1728". Este error ocurre cuando, en lugar de text al ser resaltada, he resaltado o seleccionado una verdadera file . La función de habla de Mac no puede hablar un file El discurso sólo puede verbalizar text .

Por lo tanto, me gustaría crear un if...then en mi script para detectar este error. Idealmente, me gustaría entonces convertir el file a text si es posible en la forma en que lo hace TextEdit.

5voto

user3439894 Puntos 5883

Si el portapapeles contiene un objeto de archivo Entonces clipboard info contendrá, por ejemplo, «class furl» (una URL de archivo), junto con muchas otras clases.

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

Actualizar:

Como mencioné en uno de mis comentarios, hay otras formas de codificar esto, y este enfoque devolverá o bien un vacío lista o un lista que contiene una lista que debería ser más rápido en lugar de los 14 que el primer ejemplo devuelve si contiene un archivo . Si el portapapeles no contiene un archivo entonces el lista devuelta está vacía y se equivoca, poniendo cbFile a false y si no está vacía, la configuración es true que luego se prueba en el siguiente ejemplo.

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 cierto, yo dirigí el purge comando en la Terminal entre las pruebas de estos dos ejemplos y parecía que 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:

X