1 votos

Problema con el portapapeles y la clase al ejecutar AppleScript "do shell script..."

Tengo un simple comando bash que he intentado invocar desde AppleScript pero hace una extraña sustitución unicode.

Ejemplo de contenido del portapapeles:

# 6C (d1/s2): F 11-12 100 Fly (1:12.95Y)

El comando de la terminal:

$ pbpaste | gsed 's/\x2D/\xE2\x96\xB8/g' | pbcopy

cambia "-" por "▸" cuando lo encuentra en el portapapeles

-
HYPHEN-MINUS
Unicode: U+002D, UTF-8: 2D

▸
BLACK RIGHT-POINTING SMALL TRIANGLE
Unicode: U+25B8, UTF-8: E2 96 B8

La salida del portapapeles es buena:

# 6C (d1/s2): F 11▸12 100 Fly (1:12.95Y)

El AppleScript como lo escribí:

do shell script "pbpaste | gsed 's/\\x2D/\\xE2\\x96\\xB8/g' | pbcopy"

La salida del portapapeles es incorrecta:

# 6C (d1/s2): F 11'ñ∏12 100 Fly (1:12.95Y)

Intenté jugar con algo como esto en AppleScript

set the clipboard to «class ktxt» of ((the clipboard as text) as record)

También eché un vistazo al contenido del portapapeles después de copiar el texto de un sitio web utilizando este comando en el terminal:

$ osascript -e "the clipboard as record"
osascript -e "the clipboard as record"
«class HTML»:«data HTML3C6D65746120636861727365743D277574662D38273E3C7370616E207374796C653D22636F6C6F723A2072676228302C20302C2030293B20666F6E742D66616D696C793A20417269616C2C2048656C7665746963612C2073616E732D73657269663B20666F6E742D73697A653A20313270783B20666F6E742D7374796C653A206E6F726D616C3B20666F6E742D76617269616E742D6C69676174757265733A206E6F726D616C3B20666F6E742D76617269616E742D636170733A206E6F726D616C3B20666F6E742D7765696768743A203430303B206C65747465722D73706163696E673A206E6F726D616C3B206F727068616E733A20323B20746578742D616C69676E3A202D7765626B69742D6C6566743B20746578742D696E64656E743A203070783B20746578742D7472616E73666F726D3A206E6F6E653B2077686974652D73706163653A206E6F726D616C3B207769646F77733A20323B20776F72642D73706163696E673A203070783B202D7765626B69742D746578742D7374726F6B652D77696474683A203070783B206261636B67726F756E642D636F6C6F723A20726762283233392C203235302C20323533293B20746578742D6465636F726174696F6E2D746869636B6E6573733A20696E697469616C3B20746578742D6465636F726174696F6E2D7374796C653A20696E697469616C3B20746578742D6465636F726174696F6E2D636F6C6F723A20696E697469616C3B20646973706C61793A20696E6C696E652021696D706F7274616E743B20666C6F61743A206E6F6E653B223E23203643202864312F7332293A20462031312D31322031303020466C792028313A31322E393559293C2F7370616E3E», «class utf8»:# 6C (d1/s2): F 11-12 100 Fly (1:12.95Y), «class ut16»:# 6C (d1/s2): F 11-12 100 Fly (1:12.95Y), string:# 6C (d1/s2): F 11-12 100 Fly (1:12.95Y), Unicode text:# 6C (d1/s2): F 11-12 100 Fly (1:12.95Y)

El "mismo" texto después de haberlo pasado por el comando terminal y pegado en una nota de Stickies:

$ osascript -e "the clipboard as record"
osascript -e "the clipboard as record"
«class RTF »:«data RTF 7B5C727466315C616E73695C616E7369637067313235325C636F636F61727466323531330A5C636F636F61746578747363616C696E67305C636F636F61706C6174666F726D307B5C666F6E7474626C5C66305C666E696C5C666368617273657430204D656E6C6F2D526567756C61723B7D0A7B5C636F6C6F7274626C3B5C7265643235355C677265656E3235355C626C75653235353B5C726564305C677265656E305C626C7565303B7D0A7B5C2A5C657870616E646564636F6C6F7274626C3B3B5C6373677261795C63303B7D0A5C706172645C74783536305C7478313132305C7478313638305C7478323234305C7478323830305C7478333336305C7478333932305C7478343438305C7478353034305C7478353630305C7478363136305C7478363732305C7061726469726E61747572616C5C7061727469676874656E666163746F72300A0A5C66305C66733232205C636632205C436F636F614C69676174757265302023203643202864312F7332293A20462031315C7563305C75393635362031322031303020466C792028313A31322E393559297D», «class utf8»:# 6C (d1/s2): F 11▸12 100 Fly (1:12.95Y), «class ut16»:# 6C (d1/s2): F 11▸12 100 Fly (1:12.95Y), string:# 6C (d1/s2): F 11, Unicode text:# 6C (d1/s2): F 11▸12 100 Fly (1:12.95Y)

Sólo información adicional. Los caracteres que fueron sustituidos por lo que quiero tienen esta información unicode

ñ
LATIN SMALL LETTER N WITH TILDE
Unicode: U+00F1, UTF-8: C3 B1
∏
N-ARY PRODUCT
Unicode: U+220F, UTF-8: E2 88 8F

EDITAR: Parece que la canalización de los resultados a pbcopy mientras se trabaja en el terminal, era un problema cuando se llamaba desde AppleScript.

He cambiado el AppleScript por:

do shell script "pbpaste | gsed 's/\\x2D/\\xE2\\x96\\xB8/g'; pbcopy"

?? Los resultados aparecen dentro de la ventana de resultados de AppleScript, pero esto borra el Portapapeles... ¿Alguien sabe por qué AppleScript borra el portapapeles cuando se utiliza pbcopy en un do shell script ¿comando?

1voto

user3439894 Puntos 5883

Si sólo se trata de sustituir el - con Entonces, así es como yo lo haría:

Tenga en cuenta que en el ejemplo AppleScript código las primeras y últimas líneas son para probar el contenido esperado del portapapeles para trabajar, obviamente no son necesarias en el trabajo código .

Ejemplo AppleScript código :

set the clipboard to "# 6C (d1/s2): F 11-12 100 Fly (1:12.95Y)"

set cbText to (the clipboard as text)

set AppleScript's text item delimiters to "-"
set cbText to text items of cbText
set AppleScript's text item delimiters to "▸"
set cbText to cbText as text
set AppleScript's text item delimiters to ""

set the clipboard to cbText

return (the clipboard)

Resultado:
# 6C (d1/s2): F 11▸12 100 Fly (1:12.95Y)


Por otro lado, el problema parece estar en el | pbcopy segmento de la comando .

Aquí hay otra solución:

Suponiendo que # 6C (d1/s2): F 11-12 100 Fly (1:12.95Y) es lo que hay en el portapapeles, entonces:

set the clipboard to ¬
    (do shell script "pbpaste | gsed 's/\\x2D/\\xE2\\x96\\xB8/g'")

Resultados en # 6C (d1/s2): F 11▸12 100 Fly (1:12.95Y) estar en el portapapeles.

0voto

John Puntos 16

Mientras que @user3439894 presentó una solución de trabajo, encontré la respuesta al problema de pbcopy con la ayuda de un usuario en Reddit . Espero que esto sirva de ayuda en algún momento en el futuro.

La canalización a pbcopy es el enfoque correcto. Dado que do shell script no ejecuta su shell de inicio de sesión (véase la nota técnica TN2065), tiene que suministrar la configuración regional como una variable de entorno. Para el inglés canadiense:

do shell script "pbpaste | gsed 's/\\x2D/\\xE2\\x96\\xB8/g'| LANG=en_CA.UTF-8 pbcopy"

o

Para el idioma actual del sistema:

do shell script "pbpaste | gsed 's/\\x2D/\\xE2\\x96\\xB8/g'| LANG=" & user locale of (system info) & ".UTF-8 pbcopy"

Esto me causó bastante confusión cuando estaba haciendo algunas manipuladores que modifican el portapapeles. Y como referencia, descubrí que es mucho mejor mucho mejor usando pbpaste/pbcopy que usando los comandos incorporados de StandardAdditions ya que estos tienen sus propias peculiaridades.

Así que haciendo un pequeño ajuste a su solución resulta:

do shell script "pbpaste | gsed 's/\\x2D/\\xE2\\x96\\xB8/g' | LANG=en_US.UTF-8 pbcopy"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X