0 votos

Applescript no invoca el comando de acceso directo

Tengo un documento largo de TextEdit que abro con frecuencia (mediante una pulsación de tecla, gracias a Alfred). Contiene muchas grafías no estándar, por lo que deselecciono "Revisar la ortografía mientras se escribe" (aunque quiero que la revisión ortográfica esté activada por defecto con otros documentos de TextEdit). Tenga en cuenta que he creado el atajo "Comando/Opción/Control - S" (en Prefs/Teclado/Ahortos) para activar ese comando.

Para ahorrarme un paso, quiero crear un applescript para abrir el documento y activar ese comando. Pero no puedo hacer que funcione.

El documento se abre, pero la opción "Revisar la ortografía mientras se escribe" no se desactiva.

tell application "Finder"
activate
open document file "reference.rtf" of folder "Documents" of folder "MYSTUFF" of folder "Users" of startup disk
end tell

tell application "TextEdit" to activate
tell application "System Events"
keystroke "s" using {command down, option down, control down}
end tell

\==============

EDITAR:

He insertado "Delay", pero eso no ayuda; las grafías están resaltadas.

¿Es posible que los Applescripts, por alguna razón, no puedan invocar los atajos personalizados dentro de las aplicaciones (que han sido configurados a través de Prefs/Keyboard/Shortcuts)?

¿Hay alguna otra forma de invocar el comando "Revisar la ortografía mientras se escribe"? No parece ser uno de los comandos de TextEdit que se puedan usar como script.

1voto

Aloginame Puntos 39

Sospecho que no aceptaba el atajo personalizado porque el atajo sólo se usa en TextEdit, mientras que el script lo enviaba a System Events.

Sea cierto o no, el siguiente script funciona. Escoge el elemento del menú en lugar de activarlo a través del acceso directo:

tell application "Finder"
activate
open document file "reference.rtf" of folder "Documents" of folder "MYSTUFF" of folder "Users" of startup disk
end tell
delay 1
activate application "TextEdit"
delay 1
tell application "System Events"
tell process "TextEdit"

click menu item "Check Spelling While Typing" of menu 1 of menu item "Spelling and Grammar" of menu 1 of menu bar item "Edit" of menu bar 1

end tell
end tell

0voto

Tetsujin Puntos 23061

Nota añadida después de los comentarios...
Puede que no sea el retraso lo que está causando el problema - parece más probable que sea la dificultad para determinar el estado inicial del interruptor de autocomprobación.


Creo que el "retardo" es el verdadero problema, como mencionó Arthur, pero puedes reducir ese script a 3 líneas, incluso añadiendo el retardo
Si se está ejecutando desde el HD en lugar del SSD, es posible que tenga que aumentar el valor de retardo a 2 o 3, sólo para dar tiempo a que el documento se abra y pase al frente.

tell application "Finder" to open file ((path to documents folder as text) & "reference.rtf")
delay 1
tell application "System Events" to keystroke "s" using {command down, option down, control down}

Asumo que tu ruta usuarios/mystuff/Documentos es tu carpeta habitual ~/Documentos con el nombre de la cuenta cambiado. Mi nueva versión no depende de que su nombre de usuario esté en el script, simplemente utilizará la carpeta ~/Documents del usuario actual

0voto

Tetsujin Puntos 23061

Lo añado como segunda respuesta, ya que creo que merece la pena mantener la investigación para llegar hasta aquí.

Usando mucho Google-Fu y el propio UI helper de Apple, UIElementInspector, que obtuve vía FDMlib (que enlaza directamente con Apple para la descarga) Me las arreglé para improvisar esto...

tell application "Finder" to open file ((path to documents folder as text) & "reference.rtf")
delay 1

tell application "System Events" to tell process "TextEdit"
    set v to (value of attribute "AXMenuItemMarkChar" of menu item "Check Spelling While Typing" of menu 1 of menu item "Spelling and Grammar" of menu 1 of menu bar item "Edit" of menu bar 1)

    if v = "✓" then
        click menu item "Check Spelling While Typing" of menu 1 of menu item "Spelling and Grammar" of menu 1 of menu bar item "Edit" of menu bar 1
    end if
end tell

El 'set v to...' es la parte que examina el estado actual de ese elemento de menú. Es un poco tosco y listo, pero funciona comprobando la marca de verificación real en el propio elemento de menú. Si no está marcada no hace nada, si lo está, la entrega para ser desactivada.

Estoy seguro de que un scripter adecuado podría perfeccionar esto de una docena de maneras - pero funciona :-)

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