¿Cómo hacer que Automator trate el texto como RTF?

1

Estoy escribiendo un libro y tratando de agregar un servicio para proporcionar resaltado de sintaxis al texto seleccionado en Páginas con Automator. Tengo un servicio que acepta el texto seleccionado y lo ejecuta a través de un comando de shell ( pygmentize ) que lo convierte a la sintaxis resaltada RTF.

El problema es que cuando se devuelve el texto, Automator lo trata como texto sin formato y me devuelven los errores. He intentado cambiar las aceptaciones entre ricos y simples y no hace ninguna diferencia. He intentado canalizar la salida a través de textutil en vano.

Mi única solución por ahora es que el comando de shell se copie al portapapeles con pbcopy y luego use un Automator para agarrar el contenido del portapapeles. Prefiero encontrar una manera de hacer esto sin tener que borrar el portapapeles, ¿alguna sugerencia para que Automator trate la salida de mis comandos de shell como texto enriquecido?

¿Hay alguna forma de hacer que esto funcione con AppleScript?

    
pregunta Mikey P 18.06.2013 - 02:08

2 respuestas

5

Normalmente uso scripts como este en lugar de los servicios de Automator:

try
    set old to the clipboard as record
end try
tell application "System Events" to keystroke "c" using command down
do shell script "export LC_CTYPE=UTF-8; pbpaste | /usr/local/bin/pygmentize -g -f rtf | pbcopy"
tell application "System Events" to keystroke "v" using command down
delay 0.05
try
    set the clipboard to old
end try
  • Si el portapapeles está vacío, intentar obtenerlo genera un error.
  • pbpaste y pbcopy utilizan ASCII si las variables de configuración regional no están definidas. Sin embargo, no pude hacer que pygmentize -f rtf funcione con caracteres que no son ASCII.
  • Sin el retraso set the clipboard to old a veces se ejecutaría antes de que el texto se pegara.
respondido por el user495470 18.06.2013 - 06:34
0

Posible condición de carrera

Estoy aprendiendo mucho de la respuesta de @Lauri Ranta, pero creo que la respuesta todavía puede mejorarse.

Creo que su guión tiene lo que se llama una "condición de carrera". Una condición de carrera puede ser un problema porque es una "carrera" para ver qué proceso terminará primero. Existe un proceso pbcopy que puede tomar diferentes cantidades de tiempo, dependiendo de la cantidad de texto que se esté copiando, y luego está el proceso de demora en AppleScript que se detiene por el mismo tiempo, pero puede que no sea suficiente. Tal vez una condición de carrera es la razón por la cual el retraso fue necesario para evitar que se produzca un error, no estoy seguro, pero podría ser un problema.

Para las condiciones de la carrera, no desea hacer una pausa demasiado larga ni ralentizar todo, y no quiere hacer una pausa muy pequeña y causar una posible pérdida de datos, como la restauración del antiguo portapapeles cuando pbcopy todavía se está copiando. / p>

Creo que sería bueno llamar al comando de Unix llamado "esperar" como parte del script de shell para esperar a que finalice la copia impresa y luego eliminar la llamada a "retraso" en la parte de AppleScript. Eso me hace sentir mejor.

    
respondido por el Kaydell 23.06.2013 - 02:17

Lea otras preguntas en las etiquetas