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:

  • ¿Cómo se escribe caracteres de "ancho completo"?
  • Error de AppleScript: al colocar text sin formatting en el portapapeles, el text siempre se convierte en text enriquecido
  • Cómo hacer una carpeta inteligente como una carpeta física con los contenidos combinados de dos carpetas
  • ¿Cómo crear un file RTF en blanco en AppleScript?
  • Edición de text: cambiar al modo de anulación
  • Insertar líneas en blanco en un file RTF con AppleScript
  • 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?

  • Buscar y replace AppleScript para iTunes Track Names
  • ¿Cómo se puede crear un atajo para pegar text sin formatting en Microsoft Word 2008 para Mac?
  • AppleScript: ¿Cómo get el número de caracteres de un file .rtf?
  • Pegar formatting / estilo solamente?
  • En iOS 9, ¿por qué algunos texts de voz a text están subrayados en azul?
  • Applescript: cadena hasta la date
  • 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).