1 votos

Consejos sobre la sintaxis de AppleScript para añadir la URL de los mensajes de Apple Mail.app en Calendar.app

Con un Evento de Calendar.app abierto y el cursor en el campo URL puedo seleccionar el menú Servicios y ejecutar este script. Activa Mail.app y me pide que seleccione el mensaje para copiar su URL.

Intenté usar keystroke g_url en lugar de set clipboard y keystroke "v" pero la URL completa no se pegaba, sólo "message:" se pegaba en el calendario.

Si alguien tiene alguna idea para limpiar esto y agilizarlo se lo agradecería.

Lo tengo en una acción rápida del flujo de trabajo de Automator.

tell application "Mail"
    activate
    tell application "System Events"
        display dialog "Select a Mail message to copy its Message ID" buttons {"Selected", "Cancel"}
        if button returned of result is "Selected" then
            tell application "Mail"
                set theSelectedMessages to selection
                set the selected_message to item 1 ¬
                    of the theSelectedMessages
                set message_id to the message id of the selected_message
                set the clipboard to "message://<" & message_id & ">"
                tell application "Calendar"
                    activate
                end tell
                tell application "System Events" to keystroke "v" using command down
            end tell
        end if
    end tell
end tell

EDITAR: Para aclarar. Cuando intento teclear una variable, g_url , el script no funciona.

Recibo un error al evitar el método del portapapeles. enter image description here

EDITAR 2"

Este código adelanta la ventana del visor de mensajes si se ha miniaturizado. Utilizando activate y reopen no lo hará.

    tell application "Mail"
        set MainWindow to get id of every window whose name contains "Inbox"
        set miniaturized of window id MainWindow to false
    end tell

1voto

user3439894 Puntos 5883

El ejemplo AppleScript código que se muestra a continuación, se probó en Script Editor con pequeñas modificaciones para que funcione desde dentro, y tal cual como un Automatizador Servicio/Acción Rápida , bajo MacOS Catalina con Lengua y región ajustes en Preferencias del sistema ajustado a Inglés (EE.UU.) - Primaria y me ha funcionado sin problemas 1 .

  • 1 Asume los ajustes necesarios y apropiados en <strong>Preferencias del sistema </strong>> <strong>Seguridad y privacidad </strong>> <strong>Privacidad </strong>se han fijado/abordado según las necesidades.

Ejemplo AppleScript código :

tell application "Mail"
    reopen
    activate
end tell

delay 0.25

tell current application
    activate
    set msg to "Select a Mail message to copy its Message ID"
    display dialog msg buttons {"Cancel", "Selected"} default button 1
end tell

if button returned of result is "Selected" then
    tell application "Mail"
        set theSelectedMessages to selection
        set the selectedMessage to item 1 ¬
            of the theSelectedMessages
        set messageID to the message id of the selectedMessage
        set the clipboard to "message://<" & messageID & ">"
    end tell
    tell application "Calendar" to activate
    delay 0.2
    tell application "System Events" to keystroke "v" using command down
end if

Notas:

El código en el OP no está bien estructurado al tener anidados tell bloques/declaraciones dentro de otro de una manera que no es apropiada. La página web ejemplo AppleScript código que se muestra arriba está correctamente estructurado para el eventos que deben tener lugar.

En la primera tell application "Mail" bloque reopen se utiliza para que si Correo ya está abierto y sin ventana abierto, se abre el ventana , lo que permite que se active para el usuario para hacer una selección.

El tell current application bloque permite la mostrar el diálogo para venir al frente, para no quedar oculto bajo otros Windows .

En el Automatizador Servicio/Acción Rápida el ejemplo AppleScript código es todo lo que hay en el Ejecutar AppleScript acción . El Automatizador Servicio/Acción Rápida se ajusta a El flujo de trabajo recibe [sin entrada] en [Calendario] .

Como se trata de dos aplicaciones y un Automatizador Servicio/Acción Rápida utilizando un mostrar el diálogo se podría considerar la posibilidad de añadir alguna codificación adicional para establecer el límites/posición/tamaño de la Windows y cuadro de diálogo involucrado.

Si quiere evitar el uso de el portapapeles y luego cambiar las siguientes líneas de código :

Cambios:

set the clipboard to "message://<" & message_id & ">"

Para:

set theURL to "message://<" & messageID & ">"

Cambios:

tell application "System Events" to keystroke "v" using command down

Para:

tell application "System Events"
    tell front window of process "Calendar"
        if exists pop over 1 then
            set the value of the first text field of pop over 1 ¬
                whose value of attribute "AXPlaceholderValue" is "Add URL" to theURL
        end if
    end tell
end tell

Tenga en cuenta que para utilizar el código mostrado directamente arriba, el Evento debe aparecer como emergente y el cursor colocado en el Añadir URL cuadro de texto .

Ejemplo AppleScript código :

tell application "Mail"
    reopen
    activate
end tell

delay 0.25

tell current application
    activate
    set msg to "Select a Mail message to copy its Message ID"
    display dialog msg buttons {"Cancel", "Selected"} default button 1
end tell

if button returned of result is "Selected" then
    tell application "Mail"
        set theSelectedMessages to selection
        set the selectedMessage to item 1 ¬
            of the theSelectedMessages
        set messageID to the message id of the selectedMessage
        set theURL to "message://<" & messageID & ">"
    end tell
    tell application "Calendar" to activate
    delay 0.2
    tell application "System Events"
        tell front window of process "Calendar"
            if exists pop over 1 then
                set the value of the first text field of pop over 1 ¬
                    whose value of attribute "AXPlaceholderValue" is "Add URL" to theURL
            end if
        end tell
    end tell
end if

Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>según corresponda. Corresponde al usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>pruebe con </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>. Además, el uso de la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retraso </strong></a><em>comando </em>puede ser necesario entre eventos cuando sea apropiado, por ejemplo <code>delay 0.5</code> con el <em>valor </em>de la <em>retraso </em>ajustado apropiadamente.

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