¿Applescript que responde a las pulsaciones de teclas?

0

Quiero escribir un AppleScript que

  1. corre (en un bucle) hasta que presione Esc
  2. "escucha" para las pulsaciones de teclado 1 , 2 , etc.
  3. ejecuta un comando dado para cada pulsación de tecla (ejecutando un comando de shell) ddcctl para cambiar el brillo / contraste del monitor secundario)

He buscado y todo lo que encuentro se relaciona con simulando una pulsación de tecla.

(Si esto se puede hacer en bash eso está bien, pero no sé suficientes scripts de shell para siquiera comenzar ...)


ACTUALIZAR

Residencia en esta consejo, escribí el script de shell a continuación, que funciona muy bien, pero solo si lo ejecuto dentro de la terminal. ¿Hay alguna forma de ejecutar este script 'invisiblemente', por ejemplo, desde Spotlight o mediante AppleScript? do shell script, y que responda hasta que salga?

#!/bin/bash
if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
keypress=''
while [ "$k" != "^[" ]; do
    case "$k" in
        1) ddcctl -d 1 -b 10;;
        2) ddcctl -d 1 -b 20;;
        3) ddcctl -d 1 -b 30;;
        # ...etc...
        0) ddcctl -d 1 -b 100;;
    esac
    k="`cat -v`"
done
if [ -t 0 ]; then stty sane; fi
exit 0
Ze'ev
fuente
Necesitará una forma diferente de capturar pulsaciones de teclas si desea capturar no solo dentro de su ventana enfocada sino también en todo el sistema. Yo sugeriría que en lugar de eso, usted vincule las claves que desea utilizar para que cada una ejecute su script de Apple con un parámetro simple (es decir, vincule, por ejemplo, ctrl-1 para ejecutar su script con el parámetro 1).
jksoegaard

Respuestas:

1

La forma más fácil de lograr esto es, probablemente, usar Automator para crear un Servicio. El servicio debería ejecutar un script de bash similar a este:

#!/bin/bash
ddcctl -d 1 -b 10

Luego, en Preferencias del sistema en Teclado, agregue un método abreviado de teclado para activar su Servicio.

De esta manera su acceso directo funcionará en todos los programas.

Probablemente deba hacer esto para cada uno de los 10 atajos de teclado que necesita.

jksoegaard
fuente
Sí, conozco muchas formas de ejecutar un solo comando desde una pulsación de tecla; Pero esto no es lo que quiero. Quiero lanzar algo, luego poder ajustar el brillo a través de 1-9.
Ze'ev
Esto todavía se puede lograr utilizando el mismo método. La secuencia de comandos de bash que se ejecuta mediante el método abreviado de teclado podría comprobar si se ha iniciado el "algo"; si no lo está, no hace nada. Luego, crea un programa ficticio que, cuando se inicia, simplemente se queda sin hacer nada hasta que se cierra.
jksoegaard
Alternativamente, si desea crear un programa independiente que haga esto es usar el método addGlobalMonitorForEvents en NSEvent en AppKit. Sin embargo, no tengo idea de lo fácil que es hacerlo desde AppleScript. Sin embargo, es relativamente fácil hacerlo desde Swift.
jksoegaard