Come ottenere Automator per trattare il testo come RTF?

1

Sto scrivendo un libro e sto provando ad aggiungere un servizio per fornire l'evidenziazione della sintassi al testo selezionato in Pages with Automator. Ho un servizio accetta il testo selezionato e lo esegue tramite un comando di shell ( pygmentize ) che lo converte in sintassi RTF evidenziato.

Il problema è che quando viene restituito il testo, Automator lo tratta come testo normale e io mi ritrovo senza senso. Ho provato a cambiare gli accetta avanti e indietro tra ricchi e semplici e non fa alcuna differenza. Ho provato a trasmettere l'output tramite textutil senza alcun risultato.

Il mio unico problema è che il comando della shell viene copiato negli appunti con pbcopy e poi viene usato un Automator per afferrare il contenuto degli appunti. Preferirei trovare un modo per farlo senza dover cancellare gli appunti, qualche suggerimento per far sì che Automator consideri i miei comandi della shell come testo in formato RTF?

Esiste comunque un modo per farlo funzionare con AppleScript?

    
posta Mikey P 18.06.2013 - 02:08
fonte

2 risposte

5

Di solito uso script come questo invece dei servizi di 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
  • Se gli appunti sono vuoti, provare a ottenere risultati genera un errore.
  • pbpaste e pbcopy usano ASCII se le variabili locali non sono impostate. Però non sono riuscito a ottenere pygmentize -f rtf per lavorare con caratteri non ASCII.
  • Senza il ritardo set the clipboard to old a volte verrebbe eseguito prima che il testo venisse incollato.
risposta data 18.06.2013 - 06:34
fonte
0

Possibile condizione di gara

Sto imparando molto dalla risposta di @Lauri Ranta, ma penso che la risposta possa ancora essere migliorata.

Credo che il suo copione abbia quella che viene definita una "condizione di competizione". Una condizione di gara può essere un problema perché è una "gara" per vedere quale processo finirà per primo. Esiste il processo pbcopy che potrebbe impiegare diverse quantità di tempo, a seconda di quanto testo viene copiato, e quindi c'è il processo di delay in AppleScript che si ferma per lo stesso tempo, ma potrebbe non essere sufficiente. Forse una condizione di gara è il motivo per cui il ritardo era necessario per evitare che si verificasse un errore, non sono sicuro, ma potrebbe essere un problema.

Per le condizioni di gara, non devi fermarti troppo a lungo e rallentare tutto e non vuoi rallentare troppo e causare una possibile perdita di dati, come il vecchio blocco appunti ripristinato quando pbcopy sta ancora copiando.

Credo che sarebbe bene chiamare il comando Unix chiamato "wait" come parte dello script della shell per attendere il completamento di pbcopy e quindi eliminare la chiamata a "delay" nella porzione di AppleScript. Mi sembra migliore.

    
risposta data 23.06.2013 - 02:17
fonte

Leggi altre domande sui tag