Si mi comprensión es correcta, hay dos tipos de contenido que se pueden copiar en el portapapeles global (de todo el sistema) de Mac:
text
o
file
Aunque son dos tipos de datos discretos diferentes, comparten el mismo portapapeles. Por ejemplo, si tiene una imagen file
en su portapapeles y luego copia una text
oración, la oración sobrescribirá el archivo de imagen y viceversa. Por favor, corríjame 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 archivo .scpt de AppleScript que pronuncia el texto seleccionado en System Voice en un volumen específico. El texto seleccionado se copia en el portapapeles y luego se pronuncia mediante el say
comando. El script se activa con una pulsación de tecla a través de FastScripts.app.
De vez en cuando, aparece un cuadro de diálogo de error que dice "Número de error: -1728". Este error ocurre cuando, en lugar de text
estar resaltado, he resaltado o seleccionado un archivo file
. La función de voz de Mac no puede pronunciar un file
; El habla sólo puede verbalizar text
.
Por lo tanto, me gustaría crear una if...then
declaración en mi secuencia de comandos para detectar este error. Idealmente, me gustaría convertir el file
a text
, si es posible en la forma en que lo hace TextEdit.
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 código de ejemplo verificará 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á una lista vacía o una lista que contiene una lista , que debería ser más rápido en lugar de los 14 que devuelve el primer ejemplo si contiene un archivo _ Si el Portapapeles no contiene un archivo , entonces la lista devuelta está vacía y genera un error, se establece cbFile
en false
, y si no está vacío, se establece en 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, ejecuté el purge
comando en Terminal entre probar estos dos ejemplos y sentí que el segundo ejemplo es un poco más rápido, sin embargo, YMMV.
if ((clipboard info) as string) contains "«class furl»"
entonces me gustaría que mi secuencia de comandos tenga say
el nombre de archivo del archivo del portapapeles.clipboard info
puede contener tan solo 4 clases y, si es verdadero, puede contener muchas más, por ejemplo, 14 clases. Todos los cuales deben enumerarse y algunos de ellos pueden tardar más en enumerarse que otros, lo que aumenta aún más la demora esperada. Así que solo eso inicia la diferencia de retardo. Además, si es verdadero, se consulta el Portapapeles por el nombre del archivo como una cadena, lo que agrega más a la diferencia de retraso. ¿Tiene sentido?osascript
como un argumento de time
, hubo una diferencia entre las 2 versiones. Cerré/abrí la Terminal y usé el purge
comando entre cada ejecución y cuando todo estuvo dicho, ver1 tenía una diferencia de 0.719 s entre la rama T/F y ver2 tenía una diferencia de 0.363 s entre la rama T/F en comparación con 0.356 s diff entre cada versión. Si bien ver2 fue técnicamente más rápido, el diferencial es insignificante.
klanomath
gran mac
esfera de rubik
gran mac
esfera de rubik
esfera de rubik