Error de AppleScript: al colocar texto sin formato en el portapapeles, el texto siempre se convierte en texto enriquecido

Ejecute el siguiente código para poner texto en su portapapeles:

set testString to "This string should be plain text."
set the clipboard to testString

Si abre un nuevo archivo .rtf en TextEdit.app y pega el portapapeles en este documento, observará que el portapapeles contiene texto enriquecido. Específicamente, el texto del portapapeles tiene la fuente Helveticay el tamaño 12.

También intenté especificar set the clipboard to (testString as string)o set the clipboard to (testString as text). Pero, el código siempre pone texto enriquecido en el portapapeles. Este texto enriquecido es siempre del mismo estilo (como se describe en el párrafo anterior).

¿Es posible poner texto en el portapapeles, como texto sin formato, en AppleScript?


OS X El Capitán, versión 10.11.6.


Tardíamente, esto no es completamente exacto. Cada vez que (casi siempre) copia algo en el portapapeles, se colocan varias cosas y formatos allí, incluso cuando se trata de texto 'sin formato'. En general, cuando copia algún texto, también hay una versión de texto enriquecido que (supongo) se usa cada vez que pega en un documento de texto enriquecido. Tenga en cuenta que TextEdit parece tener sus propias reglas extrañas sobre cosas, por lo que no veo cómo se puede hacer una declaración general basada en su comportamiento. Acabo de pegar un texto de esta página (algún texto de comentario) y fue formateado como Times. Y TextEdit también ofrece 'estilo de coincidencia'.

Respuestas (3)

Tal vez copiar el texto en el Pasteboard usando Cocoa-AppleScript solo configurará el texto sin formato para pegarlo en el documento RTF.

De lo contrario, utilice lo siguiente como solución alternativa:

set testString to "This string should be plain text." as string
do shell script "pbcopy <<<" & quoted form of testString

El método de solución mencionado anteriormente agrega un linefeeddespués testStringal Portapapeles y, si ese es un comportamiento no deseado, use:

set testString to "This string should be plain text." as string
do shell script "printf " & the quoted form of testString & " | pbcopy"

La otra opción es usar Pegar y hacer coincidir el estilo ⌥⇧⌘V en lugar de Pegar ⌘V para hacer coincidir lo que hay en el punto de inserción.

Puedo confirmar que su código implementa el resultado deseado de pegar la cadena como texto sin formato. Sin embargo, ambos ejemplos de código revelan un nuevo error de AppleScript: si testStringcontiene un guión largo (-) o un guión corto (-), estos caracteres de guión se convierten en mojibake. Con respecto a su sugerencia final, el problema con "Pegar y combinar estilo" es que este comando no está incluido en todas las aplicaciones.
Curiosamente, esta respuesta de desbordamiento de pila que encontré (que cita el error exacto que describí en mi publicación original) aborda el problema desde el mismo ángulo.
Esfera de @rubik, dijiste: "Con respecto a tu sugerencia final, el problema con "Pegar y combinar estilo" es que este comando no está programado en todas las aplicaciones". Mencioné ⌥⇧⌘V porque dijiste TextEdit en el OP, así que asumí que estás usando TextEdit. Dicho esto, muchas aplicaciones tienen ⌥⇧⌘V aunque eso puede llamarlo Pegar texto sin formato o similar y muchas aplicaciones tienen Pegar especial... ⇧⌘V que también puede manejar esto. Sí, no todas las aplicaciones pueden tener alguno o todos estos, sin embargo, tendrá que trabajar con lo que tiene si el uso de Cocoa-AppleScript no puede resolver el problema.
La esfera de @rubik, por cierto, EM DASH y EN DASH no son texto ASCII (simple) y, en parte, probablemente por qué obtienes mojibake. Dicho esto, AppleScript, como ha descubierto, tiene muchos errores, no hay duda de ello, especialmente porque las operaciones de tipo similar en otras aplicaciones funcionan como se esperaba, a diferencia de cómo AppleScript puede y deshace algunas cosas. Si no puede encontrar una solución/solución alternativa para usar con AppleScript, tendrá que usar un idioma/método diferente para lograr el objetivo. Otra opción es simplemente corregir manualmente las ocurrencias ocasionales de mojibake. ¿Es eso tan importante?
1. En el punto "⌥⇧⌘V" , solo mencioné TextEdit en el OP porque así es como concluí que el portapapeles establecido por AppleScript contiene texto enriquecido. Esta era mi pregunta: "¿Es posible poner texto en el portapapeles, como texto sin formato, en AppleScript?" El script en cuestión no pega ni pulsa el texto. El script simplemente coloca el texto en el portapapeles (para que el usuario pegue este texto donde quiera). 2. No, el error em dash/en dash no es gran cosa. Su solución satisface mis necesidades. Implementaré su código y agregaré una replace_charsdeclaración para dar cuenta de este error.

Esto debería funcionar:

set the clipboard to string of (the clipboard as record)

De hecho, puede probarlo con seguridad usando una declaración de prueba:

try
  set the clipboard to string of (the clipboard as record)
on error errMsg
  display dialog errMsg
end try
Probé su código, pero aún pone el texto enriquecido en el portapapeles. ¿Esta solución funciona correctamente en su entorno?

Parece que no importa lo que haga, si tiene texto sin formato seleccionado en la pestaña de su nuevo documento en sus preferencias de edición de texto, su portapapeles pegará texto sin formato. Sin embargo, si tiene habilitado el texto enriquecido, parece que todo se pegará como texto enriquecido en un documento rtf.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

También intenté seleccionar el texto en el documento RTF e intenté convertirlo a texto sin formato en el menú de formato. Apareció una ventana de diálogo que decía que el documento se convertiría de RTF a texto sin formato si elegía formatear el texto

Intente lo siguiente para presenciar el problema del que estoy hablando: Cree un documento .rtf en TextEdit. Luego, escriba un texto con cualquier fuente que no sea Helvetica, y en cualquier tamaño que no sea 12. Ahora , pegue el portapapeles (cuyo texto fue establecido por el código AppleScript). Observará que la fuente de este texto se ha cambiado a Helvetica, y el tamaño se ha cambiado a 12. Esto significa que el texto en el portapapeles es texto enriquecido; los datos de fuente únicos y los datos de tamaño únicos están contenidos en el portapapeles.