autohotkey Alternative espanso auf macOS Monterey

Ich musste beruflich mal wieder umsteigen, nach 6 Jahren auf Windows bin ich jetzt wieder auf macOS unterwegs. Da es auf dem Mac autohotkey einfach nicht gibt und ich in den letzten 17 Jahren hunderte von shortcuts memorisiert habe, musste ein Ersatz her. Hier war reddit mal wieder mein Freund. In einem Sub wurde sich da mal über Alternativen unterhalten. Da konnte man ja einfach mal schauen welche am häufigsten auftauchte und das war espanso. Ein open source Projekt, was schon mal dafür spricht und außerdem werden YAML-Dateien verwendet. Die verwenden wir im Job auch und dann war der Umstieg nicht schwer. Was machst Du jetzt mit 800 Shortcuts im .ahk Format? VIM anwerfen, umformatieren mit einem Macro und nach ein paar Stunden fummelei, wegen des neuen YML-Syntax lief dann alles wieder. Und weil das so gut geklappt hat, habe ich direkt auf meiner Parallels Windows 11 arm64 Installation auch espanso installiert, da hier meine autohotkey nicht sauber funktionieren wollte.

#
#
#  ███████╗██╗███╗   ██╗███████╗███████╗██╗██╗     ███████╗██████╗
#  ██╔════╝██║████╗  ██║╚══███╔╝██╔════╝██║██║     ██╔════╝██╔══██╗
#  █████╗  ██║██╔██╗ ██║  ███╔╝ █████╗  ██║██║     █████╗  ██████╔╝
#  ██╔══╝  ██║██║╚██╗██║ ███╔╝  ██╔══╝  ██║██║     ██╔══╝  ██╔══██╗
#  ███████╗██║██║ ╚████║███████╗███████╗██║███████╗███████╗██║  ██║
#  ╚══════╝╚═╝╚═╝  ╚═══╝╚══════╝╚══════╝╚═╝╚══════╝╚═════╝╚═╝  ╚═╝
#
#   Hilfen:
#   vars: [{ name: "clipboard", type: "clipboard" }]
#   label: "" unterhalb von trigger
#   Multiple triggers - triggers: ["" , ""]
#   Enter = \n
#
matches:
 - trigger: "--#"
   replace: "-preisvergleich -yatego -amazon -ebay -preisroboter -idealo -ladenzeile -kaufen

Man sieht schon, alles kein Hexenwerk. Mit trigger: wird der Shortcut definiert, hier --# und replace: definiert die Ersetzung, hier also "-preisvergleich -yatego -amazon -ebay -preisroboter -idealo -ladenzeile -kaufen" das brauche ich dann schon mal in der Goolge Suche, wenn ich das Produkt nicht kaufen will.

Die Syntax ist wirklich schnell gelernt. Mit "vars: [{ name: "clipboard", type: "clipboard" }]" wird auf die Zwischenablage zugegriffen.

triggers: ["sgf#", "sf#" ]
replace: "Sehr geehrte Frau ,\n"
vars: [{ name: "clipboard", type: "clipboard" }]

Hier löst sgf# oder sf# sie Ersetzung "Sehr geehrte Frau Meier, ENTER" aus, wenn Meier in der Zwischenablage war. Man kann also mehrere Trigger für die selbe Ersetzung definieren.

Super praktisch sind auch die automatisch generierten Pop-Ups. In autohotkey hatte ich dafür ein Array das per zufallszahl eine EAN/GTIN ausgewählt hat. Das ist zwar viel praktischer als das folgende, aber soweit bin ich mit espanso leider noch nicht.

#
#
# ███████╗ █████╗ ███╗   ██╗    ██╗ ██████╗████████╗██╗███╗   ██╗
# ██╔════╝██╔══██╗████╗  ██║   ██╔╝██╔════╝╚══██╔══╝██║████╗  ██║
# █████╗  ███████║██╔██╗ ██║  ██╔╝ ██║  ███╗  ██║   ██║██╔██╗ ██║
# ██╔══╝  ██╔══██║██║╚██╗██║ ██╔╝  ██║   ██║  ██║   ██║██║╚██╗██║
# ███████╗██║  ██║██║ ╚████║██╔╝   ╚██████╔╝  ██║   ██║██║ ╚████║
# ╚══════╝╚═╝  ╚═╝╚═╝  ╚═══╝╚═╝     ╚═════╝   ╚═╝   ╚═╝╚═╝  ╚═══╝
#
#
# internaltest EAN/GTIN
  - trigger: "sdd"
    replace: "2000001811153"
  - trigger: "sdd"
    replace: "2000002615743"
  - trigger: "sdd"
    replace: "2000002615767"
  - trigger: "sdd"
    replace: "2000001811139"

Wenn ich sdd eintippe poppt gleich ein Fenster auf und ich kann per Pfeiltaste oder mit Alt+1, Alt+2 usw. einen Eintrag absenden.

espanso popup

Lintalist

Noch so ein Programm das auf autohotkey basiert und das ich intensiv auf der Windows Maschine benutzt habe. Auch hier konnte ich mit espanso bisher ganz gute Ergebnisse erzielen. Man braucht noch Keyboard Maestro, das leider kein Open Source Projekt ist, aber die Investition hat sich gelohnt.

Lintalist habe ich hauptsächlich verwendet um HTML Code inkl. Zwischenablage zu ersetzen, oder HTML-Tabellen zu erzeugen und gleich die Anzahl der Spalten mitzugeben. Auch das klappt gut mit espanso, wenn man einmal verstanden hat, wie man Sonderzeichen escapen muss.

Hier wird eine Kapitel-Navigation eingefügt:

label: "Kapitel Navigation unten Clickhelp"
replace: "<p></p><hr/><p><ch:nav type=\"previous\" text=\"vorheriges Kapitel\" class=\"CHNavLinkPrevious\"/> | <ch:nav type=\"top\"  text=\"Übergeordnetes Kapitel\" class=\"CHNavLinkTop\"/> | <ch:nav type=\"next\" text=\"nächstes Kapitel\" class=\"CHNavLinkNext\"/></p><p><br/></p><p></p>"

Sieht immer etwas wilder aus, als es am Ende dann ist. Man gewöhnt sich schnell dran.

autohotkey TextMenu

Noch was gelernt diese Woche

Nach dem tippen von xx, geht direkt das Menü auf, ohne ein auslösendes Zeichen verwenden zu müssen (* bedeutet, dass nicht erst ein auslösendes Zeichen gewarte wird.) Anschließend sorgt STRSplit dafür, dass nach dem ¦ gesucht wird. Das Zeichen ist so besonders, das ich das normalerweise nirgends verwende und es sich ideal als Trennzeichen anbietet. In der Funktion "Action" wird dann noch ein weiteres StrSplit angewendet, denn ich wollte gern so eine Art Nummerierung haben. Aktuell muss der Prefix dann immer 10 Zeichen umfassen, das ist etwas lästig,m aber das werde ich die Tage dann mal noch erweitern. Ich tut mich aktuell noch sehr schwer mit RegEx.

SingleInstance,Force ; sorgt dafür, dass nur eine Instanz des Skriptes laufen kann

:*:xx::
TextMenu("1-adidas-- 4055012256071¦2-superdry 4049854925516¦3-superdry 2000002615736")
return

TextMenu(TextOptions){
for k, MenuItems in StrSplit(TextOptions,"¦") ; sucht nach dem komische Pipe Symbol
Menu, MyMenu,Add,% MenuItems,Action ; alle gefundenen Items werden dem Menü hizugefügt

Menu, MyMenu, Show ;GUI anzeigen und auf eine Aktion warten
Menu, MyMenu, DeleteAll ;Menü verwerfen und löschen
}

Action:
 ClipboardBackup:=ClipboardAll ;backup von der Zwischenablage machen
Clipboard:=SubStr(A_ThisMenuItem,12) ; Schaufel die gefunden String in die Zwischenablage, ab dem 10-ten Zeichen
Send, ^v ; Text aus der Zwischenablage einfügen
 sleep, 100 ;ein kurzes Schläfschen sorgt für besseres funktionieren
 Clipboard:=ClipboardBackup ; Zwischenablage wiederherstellen
return

ToDos

RegEx um nach dem ersten Leerzeichen den StrSplit anzusetzten. Das mit den 10 Zeichen als Prefix ist nicht optimal. ==== Links Video von Joe Glines the-automator.com zum Thema. https://www.youtube.com/watch?v=XyhhiEUK84Y&t=10s

Was ich diese Woche automatisiert habe

Was ich diese Woche automatisiert habe

Schönes kurzes Video von TAB Nation - AutoHotkye https://youtu.be/Ft1R4xle3YM gesehen und gleich mal umgesetzt. Bisher habi ich immer ein Plugin für Google Chrome verwendet, aber das kpappt nicht so recht. Es werden teilweise Änderungen erkannt, die keine sind und das ist lästig. Aslo hier ein Beispiel Skript. Ich prüfe ein TSE Zertifikat auf der Seite des BSI und möchte gern wissen, ob das immer noch nicht zertifiziert wurde.

 CODE:
 settimer, checker, 600000 ; wir Setzen einen Timer der alle 10 Minuten das Skript startet
 return
 checker:
 urlsave=https://www.bsi.bund.de/SharedDocs/Zertifikate_CC/InZertifizierung/1140.html
 UrlDownloadToFile, %urlsave%, %A_Desktop%\ahk_website_ueberwachung\bsitseatrust.txt ; die Datei wird auf den Desktop geladen und in dem Ordner / ahk_webseiteueberwachung gespeichert, als einfache .txt Datei
 FileRead, OutputVar, %A_Desktop%\ahk_website_ueberwachung\bsitseatrust.txt ; jetzt lesen wir die Datei aus und suchen nach der Zeichenkette.
 if OutputVar contains Produkt befindet sich in Evaluierung ; wird " Produkt befindet sich in Evaluierung" gefunden?
  {
  msgbox, Immer noch nicht zertifiziert ; Es wird eine Meldung ausgegebn, das das Zertifikat immer noch nicht verfügbar ist.
  }
 ;--------------------------------
 ;--------------------------------

ToDo’s

  • else Schleife bauen und Ton einfügen, falls das Zertifikat doch irgendwann mal aktiviert werden sollte.

Zum Tab Nation youtube Kanal https://www.youtube.com/channel/UC0sEz14u_aY4yPoU-LdTCsQ da kommen jede Woche ein paar neue Videos. Außerdem immer hilfreich die Videos von Joe Glines the-automator.com https://www.youtube.com/user/JoeGlines