1 votos

Vinculación de cualquier combinación de teclas para mover los accesos directos a los espacios

¿Es posible editar los atajos de teclado para que puedan ser una combinación de una tecla modificadora y un botón del ratón? Keyboard Shortcuts Me gustaría cambiar Mover un espacio a la izquierda a Shift + Mouse 5 y Mover a la derecha un espacio a Shift + Mouse 4 .

Me gustaría hacerlo de forma nativa sin tener que instalar aplicaciones de terceros como Karabiner si es posible. enter image description here

1voto

zonble Puntos 2925

Usted ha (hace unos años) abordado un problema general con el AppleScript de MacOS que me ha estado persiguiendo desde siempre
Así que empecé a buscar en la web -un poco estudio de viabilidad - tropezó naturalmente con Python y buscó muestras de código para hacer AS de los eventos del ratón. Esto es lo que he intentado construir:

A:    A simple AppleScript (> "AS") to start (and end) the "watchout":

on idle {}
    set repCount to 4
    repeat while repCount>0
        set thescript to "python '/Users/someUser/someFolder/Mouse±Key.py'"
        set xYz to do shell script thescript
        set repCount to RepCount - 1
        delay 0.1
    end repeat
    display dialog "Now: " & (repCount as string) & " runs left…"
end idle

que se ejecutará "Mouse±Key.py" en un bucle, limitado por "repCuento" a 5 carreras.

A continuación, empecé a investigar Python y encontrar la forma de detectar eventos de ratón+tecla. Resultó que un módulo "pynput" tendría que ser instalado a su (mi) Python instalación:

python -m pip install pynput    

fue recomendado para esto, así que tuve que instalar pip primero. Bueno

El actual * .py script no es muy largo, debido a mi negligencia criminal en la gestión de errores y otros.
(Como ya he mencionado: Este es un ¡Estudio de VIABILIDAD! )

Aquí viene el script - PERO: Como no soy ingeniero de software, no podré explicar (con autoridad) por qué una expresión especial está formulada o posicionada de la manera en que lo está. (juicio-y-error )

from pynput import mouse, keyboard
from pynput.keyboard import Key, Listener
import os

def on_press(key):
    global keyDown
    if key == Key.shift:
        keyDown = "57.shift"
    else:
        keyDown = "none"

def on_click(x, y, button, pressed):
    global keyDown
    if button.value[1] == 3 and keyDown == "57.shift":
        cmd = """
        osascript -e 'tell application "System Events" \n key code 123 using {control down}\n delay 0.5\n end tell' 
        """
        os.system(cmd)
    elif button.value[1] == 4 and keyDown == "57.shift":
        cmd = """
        osascript -e 'tell application "System Events" \n key code 124 using {control down}\n delay 0.5\n end tell' 
        """
        os.system(cmd)

    if not pressed:
        listener_key.stop()
        listener_mouse.stop()

listener_key = keyboard.Listener(on_press=on_press)
listener_key.start()
listener_mouse = mouse.Listener(on_click=on_click)
listener_mouse.start()
keyDown = "none "
key = "X"

if keyDown == "57.shift":
    listener_key.stop()

listener_key.join()
listener_mouse.join()

Bien, lo que yo -como lego- puede decir:

Las 3 primeras líneas importan módulos pynput (no estoy seguro, por qué teclado y ratón por separado) & os .

A continuación, 2 funciones cruciales on_press y on_click se definen;
(teclado también es compatible con on_release , ratón puede manejar on_scroll y on_move eventos).

Entre estas funciones, pero también en el hilo principal (por tanto global ) mi variable "keyDown" "transporta" la información si el clave reconocido como Clave.turno fue presionado . Nombré su contenido "57.shift" como el código de la tecla "shift" de AS.

Necesitaba "keyDown" ya que decidí dejar que el on_press sólo hacen el reconocimiento de la llave mientras que on_click evalúa el clave , decide qué acción tomar y para la "carrera" actual Detener s los oyentes.

El importado módulo os entra en juego cuando el funciones on_ llame a "atrás" a MacOS aplicación "Eventos del sistema" vía 2 osascripts (= Arquitectura de scripting abierta lenguaje), como AppleScrips.

El osascripts instruir MacOS propio sistema para invocar 2 "integrados" Control de la misión (tecla de flecha) que cambiará a los espacios del lado izquierdo (código de tecla 123) y del lado derecho (124) (s.t. llamado "Escritorios" ).

Al final de la on_click función 2 diferente Oyente s aparecen, en realidad a Detener su escucha (una vez que la osa/AppleScript ha funcionado).

Siguiente, keyboard.Listener y mouse.Listener se definen finalmente y iniciar() ed;
por otro lado, éstas se ponen en relación con las 2 funciones vitales.

El código restante define primero "keyDown" proporciona un valor inicial ficticio para clave y finalmente "se une" ambos hilos de escucha para que "espera" entre sí (dicho simplemente).

Principalmente he investigado estos códigos por puro interés; para hacer pruebas (por desgracia uso un MacBook sin botones 4 y 5) he utilizado esta línea: print(key, "(", button.value[1], ")", keyDown+" >> ", button) .

ADVERTENCIA: Como no hay manejo de errores, pueden ocurrir cosas extrañas si experimentas con mi código.

(Cualquiera que tenga más conocimientos informáticos que yo puede mejorar o comentar mis esfuerzos, pero por favor, deje mi lista de viñetas tal y como está).

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