Karabiner-Elemente: Warum wird eine Reihe (oder Sequenz/Batch) von Tasten, die in {…"to": …} aufgerufen werden, nur jedes zweite Mal ausgeführt?

Ich habe die ursprüngliche Karabiner-App 10.22 verwendet und konnte alle Aktionen über Apples Accessibility Inspector sehr genau einschränken, um für bestimmte Dialogfenster zu funktionieren.

Mit Karabinerelementen ist dies nicht mehr möglich.

Um also (in Safari) auf den Punkt "Element Information" des Kontextmenüs zu klicken (den ich sehr oft verwende), habe ich diesen Code in "Complex Modifications" ausprobiert:

 "to": [ { "pointing_button": "button2" },
         { "key_code": "e" },
         { "key_code": "return_or_enter"}  ]

Was funktionierte , aber alternativ nur das Kontextmenü öffnete / zeigte oder "Elementinformationen" tatsächlich ausführte.

Durch Experimentieren habe ich eine Problemumgehung gefunden, die meistens für mich funktioniert:

"parameters": { "basic.to_if_held_down_threshold_milliseconds": 50 }, 
"to":       [ { "pointing_button": "button2" } ],
"to_if_held_down":
            [ { "key_code": "e" },
              { "key_code": "return_or_enter"} ]

Meine Fragen:

Warum werden nicht alle "Befehle" im ersten Codebeispiel in der richtigen Reihenfolge (oder: nur abwechselnd) ausgeführt und (interessanter:) wie können Sie sicherstellen, dass jeder "Befehl" jedes Mal ausgeführt wird ?

Vielleicht fragen Sie im speziellen Karabiner-Forum nach? groups.google.com/forum/#!forum/osx-karabiner

Antworten (1)

Ich denke, Ihre Problemumgehung zeigt den Grund perfekt: Sie wählen "Elementinformationen" über die GUI aus, und das Aufrufen des Kontextmenüs kann einige Millisekunden dauern. Dies ist kein spezielles Problem mit Karabiner – wenn die Tastencodes Eund returnsofort nach dem Rechtsklick gesendet werden, ist das Kontextmenü möglicherweise noch nicht im Fokus und sie werden nicht richtig geleitet.

Kurz gesagt, wenn Sie ein GUI-Makro erstellen, müssen Sie möglicherweise warten, bis die GUI antwortet.

Aus meiner Sicht gibt es drei mögliche Lösungen:

  • Fügen Sie einfach eine kurze Verzögerung hinzu, wie Sie es getan haben,
  • Verwenden Sie ein alternatives Werkzeug (z. B. Keyboard Maestro), mit dem Sie pausieren können, bis eine bestimmte Bedingung erfüllt ist, oder
  • Verwenden Sie eine alternative Methode zum Aktivieren des gewünschten Ergebnisses, dh etwas, das sich nicht auf die grafische Benutzeroberfläche auf Benutzerebene stützt, z. B. AppleScript (obwohl ich nicht weiß, ob eine solche Option für dieses spezielle Ziel existiert).
Vielen Dank für Ihre Antwort, die den ersten Teil (warum) meiner Frage anspricht; der zweite Teil (how2) ist immer noch am interessantesten, um eine ausfallsichere Methode zu erhalten (unabhängig von CPU, RAM usw.). Ich habe das „Warum“ mit meinem Workaround behoben, aber das wird nicht auf jedem Computer funktionieren, vielleicht nicht einmal auf meinem eigenen, wenn zu viele Apps gleichzeitig arbeiten. Ich stimme deiner Antwort eins zu, wenn also niemand eine How2-Antwort findet, bekommst du das Kopfgeld ... :-)
[ZU SPÄT HINZUGEFÜGT:] … falls ja sonst „stimmt“ … :-)
@clemsamlang Ich habe meine Antwort zu meiner Antwort hinzugefügt, da sie nicht gut in einen Kommentar passte. :)
– Ich weiß das zu schätzen … Sie haben zufällig keine Idee, wie KE dazu gebracht werden kann, tatsächlich auf ein GUI-Ereignis zu WARTEN?
@clemsamlang Ich bin mit der Skriptseite von KE nicht sehr vertraut. Ich müsste mehr recherchieren.
Ich schlage vor, dass jemand, der diesen Thread liest, Ihre/Timothys Antwort auf +2 "verbessert": Auf diese Weise erhält er die Hälfte des "Kopfgeldes". Da der wichtige (2.) Teil meiner Frage nicht beantwortet wird, möchte ich nicht, dass dieser Thread so aussieht, als gäbe es eine endgültige Antwort …