Error de AppleScript: no puedo convertir text enriquecido a text sin formatting

Creé un file AppleScript (.scpt) titulado " Escriba el Portapapeles como text simple de una sola línea ". La secuencia de commands se activa mediante un atajo de keyboard establecido por FastScripts.

Comportamiento deseado:

  • ¿Hay una manera más rápida de insert text en el cursor en AppleScript que "presionar el keyboard"?
  • ¿Por qué los texts de mi computadora muestran que provienen de "myname" @ icloud.com?
  • Autocompletar para MacOS
  • ¿Cómo puedo desactivar globalmente 'Reemploop de text'?
  • Escriba comillas rectas (",") cuando las comillas inteligentes estén activadas
  • AppleScript: ¿Cómo get el número de caracteres de un file .rtf?
  • Quiero que este script tome los contenidos del portapapeles, elimine todo el formatting y luego elimine los saltos de línea o las tabs de este text. Finalmente, quiero que el script escriba el nuevo text. Quiero preservar, no sobrescribir, el contenido original del portapapeles.

    El problema específico:

    El error específico es que mi secuencia de commands no puede eliminar todo el formatting de algunos texts enriquecidos.

    No puedo include contenido completo de text enriquecido en una publicación de Stack Exchange. Por lo tanto, para presenciar mi problema exacto, descargue este file .rtf a través de Dropbox . Abra este file en TextEdit.app. Resalta la oración y cópiala en el portapapeles. A continuación, active mi secuencia de commands mientras el cursor está en un formatting que admita y muestre text enriquecido (para que pueda ver que la secuencia de commands escribirá text enriquecido).

    Notará que la oración escrita es contenido de text enriquecido y aún contiene elementos de formatting. Estos elementos incluyen la fuente de text original (Helvetica) y el tamaño de fuente original (12). Estos elementos deberían haber sido descartados. Por lo tanto, mi código es negligente o he encontrado un error genuino dentro de AppleScript. Estoy asumiendo que es el último.

    El código más corto necesario para reproducir el error:

    use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "AppKit" -- Back up clipboard contents: set savedClipboard to my fetchStorableClipboard() (* Converting the clipboard text to plain text to remove any formatting: From: http://lifehacker.com/127683/clear-text-formatting-on-os-x *) set theClipboardTextWithoutAnyFormatting to (the clipboard as text) (* Removing line breaks and indentations in clipboard text: From: http://stackoverflow.com/a/12546965 *) set AppleScript's text item delimiters to {return & linefeed, return, linefeed, character id 8233, character id 8232} set theClipboardTextWithoutAnyFormatting to text items of (theClipboardTextWithoutAnyFormatting as text) set AppleScript's text item delimiters to {" "} set theClipboardTextWithoutAnyLineBreaksOrFormatting to theClipboardTextWithoutAnyFormatting as text set the clipboard to theClipboardTextWithoutAnyLineBreaksOrFormatting tell application "System Events" to keystroke "v" using {command down} delay 0.1 -- Without this delay, may restre clipboard before pasting. -- Restore the original clipboard: my putOnClipboard:savedClipboard on fetchStorableClipboard() set aMutableArray to current application's NSMutableArray's array() -- used to store contents -- get the pasteboard and then its pasteboard items set thePasteboard to current application's NSPasteboard's generalPasteboard() -- loop through pasteboard items repeat with anItem in thePasteboard's pasteboardItems() -- make a new pasteboard item to store existing item's stuff set newPBItem to current application's NSPasteboardItem's alloc()'s init() -- get the types of data stonetworking on the pasteboard item set theTypes to anItem's types() -- for each type, get the corresponding data and store it all in the new pasteboard item repeat with aType in theTypes set theData to (anItem's dataForType:aType)'s mutableCopy() if theData is not missing value then (newPBItem's setData:theData forType:aType) end if end repeat -- add new pasteboard item to array (aMutableArray's addObject:newPBItem) end repeat return aMutableArray end fetchStorableClipboard on putOnClipboard:theArray -- get pasteboard set thePasteboard to current application's NSPasteboard's generalPasteboard() -- clear it, then write new contents thePasteboard's clearContents() thePasteboard's writeObjects:theArray end putOnClipboard: 

    Primero, ¿alguien puede confirmar que el problema declarado ocurre en su computadora?

    Si es así, ¿cómo puedo eliminar todo el formatting de text enriquecido en AppleScript, teniendo en count este error que he descubierto?

  • ¿Cómo envío a alguien un text normal si también usan iMessage?
  • Copiando text de un file usando Quick Look?
  • ¿Cómo configurar el formatting de Rupia india en Numbers?
  • ¿Cómo crear un file RTF en blanco en AppleScript?
  • Complemento AppleScript o Safari para resaltar text
  • Opción de abrir como text para cada file, independientemente de lo que OS X piense de él
  • 2 Solutions collect form web for “Error de AppleScript: no puedo convertir text enriquecido a text sin formatting”

    Como the clipboard command the clipboard agrega otros types automáticamente, pruebe este guión:

     set the clipboard to "hello" as string delay 1 return clipboard info 

    el resultado es -> {{text Unicode, 10}, {cadena, 5}, {styles de chatarra, 22}, {«class utf8», 5}, {«class ut16», 12}, {chatarra, 22 }}


    Para evitar los styles, use los methods de NSPasteboard :

     -- *** add the missing lines from your script here *** --- set the clipboard to theClipboardTextWithoutAnyLineBreaksOrFormatting -- don't use this command to avoid the scrap styles type. my putTextOnClipboard:theClipboardTextWithoutAnyLineBreaksOrFormatting -- use this method to put some string in the clipboard. tell application "System Events" to keystroke "v" using {command down} delay 0.1 -- Without this delay, may restre clipboard before pasting. -- Restore the original clipboard: my putOnClipboard:savedClipboard on putTextOnClipboard:t set thePasteboard to current application's NSPasteboard's generalPasteboard() thePasteboard's clearContents() thePasteboard's declareTypes:{current application's NSPasteboardTypeString} owner:(missing value) thePasteboard's setString:t forType:(current application's NSPasteboardTypeString) --> now the clipboard contains these types only: («class utf8», «class ut16», string and Unicode text) end putTextOnClipboard: 

    Probando con tu código y luego con mi propio código AppleScript simple, puedo reproducir el comportamiento (no deseado) hasta un punto en el que aceptaría que el comportamiento no es el deseado y podría considerarse un error, sin embargo, la solución es un poco difícil. .

    En este método, en lugar de establecer theClipboardTextWithoutAnyLineBreaksOrFormatting directamente en el Portapapeles, porque ahí es donde está el problema , se escribirá en un file temporal, luego se colocará en el Portapapeles utilizando pbcopy en un command do shell script y luego se eliminará el file temporal . Luego se puede pegar en el punto de inserción del objective.

    Para probar el siguiente código de solución, comente el set the clipboard to theClipboardTextWithoutAnyLineBreaksOrFormatting línea set the clipboard to theClipboardTextWithoutAnyLineBreaksOrFormatting y luego coloque el código de solución directamente después de él y antes de tell application "System Events" to keystroke "v" using {command down} .

     set tempFileToRead to POSIX path of (path to desktop) & ".tmpfile" try set referenceNumber to open for access tempFileToRead with write permission write theClipboardTextWithoutAnyLineBreaksOrFormatting to referenceNumber close access referenceNumber on error eStr number eNum display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with title "File I/O Error..." with icon caution try close access referenceNumber end try return end try do shell script "pbcopy<" & tempFileToRead & "; rm " & tempFileToRead 
    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).