Mousetroke GitHub
Deutsch ▾
Inhaltsverzeichnis

Lua-Rezepte#

Fügen Sie einen vollständigen Block in die Aktion Lua-Skript einer Geste ein. Jeder Block definiert ms_action. Probieren Sie Text-Rezepte zuerst in einem entbehrlichen Textdokument aus. Lua-Grundlagen erklärt den Editor, und Lua-API listet die Plattformunterstützung auf.

Plattformübergreifende Rezepte verwenden package.config, um ^ (Strg unter Windows) oder # (Command auf dem Mac) zu wählen. Zwischenablagen-Rezepte bewahren nur Text, keine Bilder oder anderen Formate. Ihre 200-ms-Wartezeiten sind Beispiele, keine Garantie der Anwendung; verlängern Sie sie, wenn das Ziel langsam ist. Sie ersetzen den Zwischenablageninhalt vorübergehend und stellen den gesicherten Text wieder her, selbst wenn Sie in der Zwischenzeit etwas anderes kopieren.

Festen Text eingeben#

Ziel: mit einer Mausgeste einen wiederverwendbaren Satz einfügen.

function ms_action()
  ms.keys("Hello from Mousetroke.", true)
end

Der Text-zuerst-Modus unterstützt auf beiden Plattformen Unicode. Er parst weiterhin Syntaxzeichen; verwenden Sie für beliebige Satzzeichen wie %, + oder Klammern das Zwischenablagen-Rezept.

Zwischenablagentext einfügen und wiederherstellen#

Ziel: wörtlichen Text einfügen und danach den Text wiederherstellen, der zuvor in der Zwischenablage lag.

function ms_action()
  local mod = package.config:sub(1, 1) == "\\" and "^" or "#"
  local saved = ms.get_clipboard_text()
  ms.set_clipboard_text("Price: 50% + tax {example}")
  ms.keys(mod .. "v")
  ms.sleep(200)
  ms.set_clipboard_text(saved or "")
end

Das umgeht das Escaping der Tastenfolge für den eingefügten Text. Gab es keinen Zwischenablagentext, enthält die Zwischenablage am Ende leeren Text; andere ursprüngliche Formate lassen sich mit diesen APIs nicht wiederherstellen.

Unterschiedlicher Text pro App#

Ziel: anhand der Identität der ausführbaren Datei des Gestenziels eine Formulierung wählen.

function ms_action(pos, wid, pid, exe)
  local name = string.lower(exe)
  local text = "Hello from Mousetroke"
  if string.find(name, "firefox", 1, true) then
    text = "Hello Firefox"
  elseif name == "com.apple.safari" then
    text = "Hello Safari"
  end
  ms.keys(text, true)
end

Windows-Identitäten sind normalerweise vollständige Pfade zu ausführbaren Dateien; der Mac liefert üblicherweise eine Bundle-ID. Dies prüft das erfasste Ziel, während die Eingabe an die aktive App geht. Verwenden Sie zuerst ms.focus_win(wid), wenn Sie die Ziel-App aktivieren möchten.

Das heutige Datum einfügen#

Ziel: das lokale Datum als Jahr-Monat-Tag einfügen.

function ms_action()
  ms.keys(os.date("%Y-%m-%d"), true)
end

os.date steht in der Laufzeit zur Verfügung. Die %-Zeichen sind Syntax des Lua-Datumsformats; die entstehenden Ziffern und Bindestriche sind für die Text-zuerst-Eingabe sicher.

Markierten Text auf einer Website suchen#

Ziel: die Markierung kopieren und eine UTF-8-kodierte Google-Anfrage öffnen.

local function url_encode(text)
  return (text:gsub("([^A-Za-z0-9%-._~])", function(c)
    return string.format("%%%02X", string.byte(c))
  end))
end

function ms_action()
  local mod = package.config:sub(1, 1) == "\\" and "^" or "#"
  local saved = ms.get_clipboard_text()
  ms.set_clipboard_text("")
  ms.keys(mod .. "c")
  ms.sleep(200)
  local text = ms.get_clipboard_text() or ""
  ms.set_clipboard_text(saved or "")
  if text ~= "" then
    ms.open("https://www.google.com/search?q=" .. url_encode(text))
  else
    ms.show_toast("No selected text copied")
  end
end

Markieren Sie vor dem Auslösen Text in der aktiven App. Das vorherige Leeren der Zwischenablage verhindert die Suche nach altem Zwischenablagentext, falls Kopieren nichts bewirkt. Lua hat keine automatische Ersetzung von markiertem Text; die einfachere Aktion URL öffnen kann die Markierung für Sie einsammeln.

Markierten Text in Anführungszeichen oder Klammern einschließen#

Ziel: den markierten Text in einem bearbeitbaren Feld durch eine zitierte Fassung ersetzen.

function ms_action()
  local mod = package.config:sub(1, 1) == "\\" and "^" or "#"
  local saved = ms.get_clipboard_text()
  ms.set_clipboard_text("")
  ms.keys(mod .. "c")
  ms.sleep(200)
  local text = ms.get_clipboard_text() or ""
  if text ~= "" then
    ms.set_clipboard_text('"' .. text .. '"')
    ms.keys(mod .. "v")
    ms.sleep(200)
  end
  ms.set_clipboard_text(saved or "")
end

Für Klammern ersetzen Sie den Ausdruck zum Einschließen durch "[" .. text .. "]". Kopieren muss den Text markiert lassen, damit Einfügen ihn ersetzt. Schreibgeschützte Seiten lassen sich auf diese Weise nicht bearbeiten.

Immer im Vordergrund umschalten#

Ziel: den Zustand „immer im Vordergrund“ eines Windows-Fensters umschalten. Wählen Sie für dieses Rezept Fensteraktionen → Immer im Vordergrund / aufheben: Diese Aktion kann den tatsächlichen Zustand abfragen und umschalten. Die Lua-API setzt nur einen gewünschten Zustand; sie hat keinen Getter dafür, und jede Geste erhält eine frische VM. Der Mac unterstützt die app-übergreifende Steuerung von „immer im Vordergrund“ nicht.

Wenn Sie unter Windows eine zusätzliche Lua-Geste „dieses Fenster anheften“ möchten, verwenden Sie:

function ms_action(pos, wid)
  if package.config:sub(1, 1) ~= "\\" then
    ms.show_toast("Always-on-top is unavailable on Mac")
    return
  end
  if wid ~= 0 then ms.set_win_top(wid, true) end
end

Verwenden Sie false statt true für eine separate Geste zum Lösen. Ein globales Lua-Boolean würde bei jeder Ausführung zurückgesetzt und keinen Umschalter umsetzen.

Maximieren oder wiederherstellen#

Ziel: den maximierten Zustand des Zielfensters unter Windows oder den Arbeitsbereich-Zoom auf dem Mac umschalten.

function ms_action(pos, wid)
  if wid == 0 then return end
  local state = ms.get_win_state(wid)
  if state == nil then
    ms.show_toast("Window unavailable; check Accessibility permission on Mac")
    return
  end
  ms.set_win_state(wid, state == "max" and "normal" or "max")
end

Der Mac verwendet dieselbe AX-Zoom-Taste wie die integrierte Fensteraktion. Die Zustandsabfrage erkennt Fenster in Arbeitsbereichsgröße; Apps, die auf ihre Inhaltsgröße zoomen, melden eventuell weiterhin normal — verwenden Sie für diese Apps Fensteraktionen → Maximieren / Wiederherstellen. Eine fehlende Bedienungshilfen-Berechtigung oder ein nicht verfügbares Fenster liefert nil. Eine Lua-API für Fensterposition/-größe zum Verschieben eines Fensters auf einen anderen Monitor gibt es nicht.

Helligkeit unter dem Cursor#

Ziel: die Helligkeit des Bildschirms unter dem Cursor unter Windows um 5 Prozentpunkte erhöhen.

function ms_action()
  local p = ms.get_mouse_pos()
  local value = ms.set_brightness(p, 5)
  if value ~= nil then
    ms.show_toast("Brightness: " .. value)
  else
    ms.show_toast("Brightness API unavailable for this screen/platform")
  end
end

Ändern Sie 5 in -5 für eine zweite, dunklere Geste. Windows braucht kompatible DDC/CI- oder WMI-Hardware; WMI fällt auf sein erstes Helligkeitsgerät zurück, was ein anderer Bildschirm sein kann. Erfolg ist ein Prozentsatz von 0–100; Fehler ist nil auf beiden Plattformen. Der Mac liefert hier nil: sein bestehendes Backend sendet nur Helligkeitstasten und kann weder einen Prozentsatz liefern noch ein Prozentpunkt-Delta anwenden. Verwenden Sie Medien und System → Heller / Dunkler für Helligkeitstasten des eingebauten Bildschirms, ohne Auswahl des Cursor-Bildschirms oder externes DDC/CI.

Einen Ordner öffnen#

Ziel: den Ordner „Downloads“ des aktuellen Benutzers mit dem Dateibrowser der Plattform öffnen.

function ms_action()
  if package.config:sub(1, 1) == "\\" then
    ms.cmd('explorer.exe "%USERPROFILE%\\Downloads"')
  else
    ms.cmd('/usr/bin/open "$HOME/Downloads"')
  end
end

Diese Umgebungsvariablen werden von der Shell des Betriebssystems expandiert, nicht von Mousetrokes Aktionsvariablen. Das nimmt den üblichen Speicherort von „Downloads“ an.

Ein Programm mit Argumenten starten#

Ziel: einem Programm eine Argumentzeichenkette übergeben.

function ms_action()
  if package.config:sub(1, 1) == "\\" then
    ms.run("cmd.exe", "/K echo Hello from Mousetroke")
  else
    ms.run("/usr/bin/say", '"Hello from Mousetroke"')
  end
end

Windows öffnet ein Befehlsfenster mit einer Meldung. Der Mac spricht den Satz mit say aus. ms.run akzeptiert eine Argumentzeichenkette, keine Tabelle, und liefert kein Prozess-Handle.

Task-Manager oder Activity Monitor öffnen#

Ziel: die Prozessanzeige der Plattform öffnen.

function ms_action()
  if package.config:sub(1, 1) == "\\" then
    ms.keys("^+{ESC}")
  else
    ms.run("com.apple.ActivityMonitor")
  end
end

Windows verwendet Strg+Umschalt+Esc. Der Mac startet Activity Monitor über die Bundle-ID.

Den Bildschirm sperren#

Ziel: die aktuelle Sitzung mit ihrem Systemkürzel sperren.

function ms_action()
  if package.config:sub(1, 1) == "\\" then
    ms.keys("#l")
  else
    ms.keys("^#q")
  end
end

Der Mac verwendet Control+Command+Q. Windows verwendet Win+L; Strg+Alt+Entf lässt sich nicht als gewöhnliche Tastenfolge synthetisieren.

Gesten für zehn Minuten pausieren#

Ziel: die Engine vorübergehend pausieren und danach fortsetzen, während Mousetroke weiterläuft.

function ms_action()
  ms.set_paused(true)
  ms.show_toast("Gestures paused for ten minutes", 2000)
  ms.sleep(10 * 60 * 1000)
  ms.set_paused(false)
  ms.show_toast("Gestures resumed", 1500)
end

Das funktioniert auf beiden Plattformen und hält einen Lua-Worker zehn Minuten lang schlafend. Es ist kein dauerhafter Timer: Beenden oder Neustart beendet ihn. Sie können während der Wartezeit manuell fortsetzen, aber das Skript stellt am Ende der Wartezeit dennoch auf fortgesetzt. Vermeiden Sie es, mehrere Kopien zu starten. Siehe Laufzeitgrenzen.

Mit einer Alltagsgeste beginnen

Laden Sie Mousetroke kostenlos herunter und richten Sie Ihre erste Geste ein. Für Windows und die Mac-Beta verfügbar.