0 votos

Manejador de clic en Apple script

He creado una aplicación independiente para MacOS utilizando script Editor. Al iniciar, la aplicación ejecuta un bash script y al salir, la aplicación ejecuta otro bash script. El código es el siguiente

do shell script "complete path to start script"
on quit 
     do shell script "complete path to quit script"
     continue quit
end quit 

Cuando abro la aplicación hace lo que se supone que debe hacer y la aplicación permanece en el dock hasta que se cierra. Me gustaría que el buscador abriera una carpeta específica cuando hago clic en el símbolo de la aplicación en el dock. ¿Hay alguna forma de hacerlo?

0 votos

Hacer clic específicamente en el icono del dock es bastante difícil de implementar. Sin embargo, como hacer clic en el icono del dock también activaría o enfocaría tu aplicación, es algo que puede implementarse de forma relativamente sencilla.

0 votos

Me alegro de que sea sencillo. ¿Alguna pista sobre cómo ponerlo en práctica?

1voto

qarma Puntos 71

Conseguir que tu aplicación responda específicamente a un usuario que hace clic en su icono del dock es difícil. Una tarea más sencilla es conseguir que tu aplicación responda al adquirir el foco donde antes pertenecía a otra aplicación, es decir, siempre que tu aplicación pase a primer plano, lo que ocurrirá al hacer clic en el icono del dock.

He comentado fuertemente el script a continuación para guiarte a través de lo que es relevante. Todo lo que he dejado sin comentar o no he hecho referencia específicamente en los comentarios debe ser dejado solo y donde está, a menos que esté seguro de que sabe lo que está haciendo.

Obviamente, esto no hará mucho si simplemente se ejecuta desde dentro de script Editor así que incorpore esto al código AppleScript de su aplicación (o, mejor dicho, incorpore el código AppleScript de su aplicación a esto), guárdelo y ejecute el applet. Si no realiza ninguna modificación, cuando se guarde como applet, verá aparecer una notificación cada 10 segundos que le indicará que la aplicación se está ejecutando. "al ralentí..." y, cada vez que se enfoque la aplicación, aparecerá un cuadro de diálogo que le informará de que "Enfoque adquirido". .

-----------------------------------------------------------|
on run
    _init()

    # Your startup code goes here, which will
    # execute once when your application runs
    # e.g.
    #   do shell script "/path/to/start-script.sh"
end run

on idle
    # Any code you need to run repeatedly can
    # go here.  Otherwise, you can delete this
    # entire handler

    # The following line is test code:
    display notification "idling..."

    # The return value is how often (in seconds)
    # this handler will be called
    return 10
end idle

on activate
    # Insert code you want to execute whenever
    # your application receives focus, e.g.
    # 
    #   tell application "System Events" to ¬
    #       open folder "~/Path/To/Folder/"

    # The following line is test code:
    display dialog "Focus acquired."
end activate

on quit
    global |@|
    |@|'s removeObserver:me

    # Any other clean-up code that needs to
    # execute just before your application
    # exits should go here, e.g.
    #   do shell script "/path/to/quit-script.sh"

    continue quit
end quit
-----------------------------------------------------------|
# PRIVATE HANDLERS:
use framework "Foundation"
use framework "AppKit"
use scripting additions

property |@| : a reference to my NSWorkspace's ¬
    sharedWorkspace's notificationCenter

on _init()
    "NSWorkspaceDidActivateApplicationNotification"
    |@|'s addObserver:me selector:("_notify:") ¬
        |name|:result object:(missing value)

    idle
end _init

to _notify:notification
    local notification
    if my id = the notification's userInfo()'s ¬
        NSWorkspaceApplicationKey's ¬
        bundleIdentifier() as text ¬
        then activate me
end _notify:
-----------------------------------------------------------|

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