Permalink

Howto: Per Shortcut in macOS Apps einloggen (mit Hilfe von 1Password und Keyboard Maestro)

Trotz aller Kontroversen bin ich nach wie vor ein sehr großer Fan des Passwortmanagers 1Password.

Vor etwas mehr als zwei Jahren hatte ich auf die verfügbaren Tastaturkürzel der App aufmerksam gemacht und gezeigt, wie man sich über 1Password mini relativ einfach in Webseiten und Apps einloggen kann.

Bildschirmfoto 2017-08-25 um 11.02.06-minishadow

Während das Einloggen auf Webseiten (meistens) mit einem nur einem Klick oder Sprachbefehl erledigt ist, sind zum Einloggen in eine App schon mehrere Schritte notwendig.

Um diesen Workflow abzukürzen, hatte unser geschätzter Kollege Alexander vor gut zwei Wochen ein erstes Video-Tutorial erstellt, in dem er erklärt, wie man sich mit Hilfe von Keyboard Maestro und nur einem Mausklick, einem Shortcut oder auch nur durch das Starten einer App in Accounts einloggen kann.

Damit dieses erste Tutorial problemlos funktioniert, muss 1Password mini allerdings ständig entsperrt sein. Ist es das nicht, was bei vielen Nutzern der Standardfall sein sollte, funktioniert das Makro nicht und man muss sich etwas Neues einfallen lassen. Das hat Alexander auch getan und mit Hilfe des Keyboard Maestro Forums eine Lösung gefunden, die auf nur einem einzigen AppleScript basiert 😲

use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

on run
  set searchTerm to "icloud"

  tell application "System Events"
    set preClip to (the clipboard) as text
    set elements to every UI element whose creator type is "1Ph*"
    if elements is {} then
      log "1Password Mini is not running"
      return false
    end if
    set mini to (first item of elements)
    set miniName to short name of mini
    log miniName & " is running as " & name of mini
    set isLocked to my isOPMiniLocked(miniName)
    open location "x-onepassword-helper://search/" & searchTerm
    if isLocked then
      if not (my waitForUnlock(miniName, 10)) then
        return false
      end if
    end if
    tell its UI element (name of mini)
      set frontmost to true
      set i to 0
      repeat
        try
          if (focused of text field 1 of window 1) is true then
            tell text field 1 of window 1
              set value to searchTerm
              perform action "AXConfirm"
            end tell
            delay 1.0
            keystroke "c" using {command down, shift down}
            delay 0.5
            set thePass to (the clipboard) as text
            exit repeat
          end if
        end try
        delay 0.1
        set i to i + 1
        if i > 100 then
          return false
        end if
      end repeat
  
      tell application "App Store" to activate
      delay 0.5
      keystroke thePass
      key code 36
      set the clipboard to preClip
    end tell
  end tell
end run

on isOPMiniLocked(miniName)
  tell application "System Events"
    tell application process miniName
      perform action "AXPress" of menu bar item 1 of menu bar 1
      set isLocked to (subrole of text field 1 of window 1 is "AXSecureTextField")
      delay 0.1
      key code 53 -- Escape key to close 1PMini window
      if isLocked then
        log "1Password Mini is locked"
        return true
      end if
      log "1Password Mini is unlocked"
      return false
    end tell
  end tell
end isOPMiniLocked

on waitForUnlock(pProcessName, pMaxTimeSec)
  local startTime, elapTime, errMsg
  set startTime to current application's NSDate's |date|()
  log startTime
  tell application "System Events"
    repeat
      set elapTime to (-(round ((startTime's timeIntervalSinceNow()) * 100)) / 100.0)
      if (elapTime > pMaxTimeSec) then
        set errMsg to "Max Time of " & pMaxTimeSec & " seconds exceeded waiting for " & pProcessName
        log errMsg
        return false
      end if
      try
        set roleMode to (subrole of text field 1 of window 1) of (application process pProcessName)
        if roleMode is "AXSearchField" then
          return true
        end if
      end try
      delay 0.1
    end repeat
  end tell
end waitForUnlock

Ohne jetzt in die Tiefen des Codes einzusteigen, muss gesagt werden, dass dieses Skript nur bedingt universell verwendbar ist. Je nachdem in welche App man sich einloggen möchte, muss das AppleScript an zwei Stellen angepasst werden.

Zum einen direkt am Anfang bei der Suche nach dem in 1Password hinterlegten Login. Zum anderen bei der App, für die ein Login benötigt wird.

KM_Macro_Screenshot_2017-09-08 um 09.52.01_1300px

Ist nun alles gut?! Mitnichten, denn für Leute wie mich, die eines dieser neumodischen MacBook Pro mit Touch ID verwenden, funktioniert das AppleScript nicht; zumindest wenn man Touch ID zum Entsperren von 1Password verwendet.

Aber auch hier kamen Alexander und ich nach einigen Überlegungen zum Ziel: Keyboard Maestro hat nämlich den Vorteil, dass man Bedingungen an am Bildschirm angezeigte Fenster bzw. Grafiken knüpfen kann.

Somit ist das vorherige AppleScript jetzt in zwei Teile zerhackt, funktioniert aber auch mit Touch ID 😎

KM_Macro_Screenshot_2017-09-08 um 09.51.21_1300px 2

Auch hier gilt wieder: das Makro ist nicht universell verwendbar, sondern muss für jeden App-Login an drei Stellen angepasst werden. Zu den aus dem ersten AppleScript bekannten Stellen kommt jetzt noch eine Grafik hinzu, die den gefundenen Login in 1Password mini identifiziert.

Zum finalen Anzeigen bzw. Nutzen der verschiedenen Logins empfiehlt es sich auf die von Keyboard Maestro zur Verfügung gestellten globalen Makro Paletten zu setzen. Hier genügt dann im Endeffekt ein Mausklick und man ist in App X oder App Y eingeloggt.

Bildschirmfoto 2017-09-08 um 11.19.40

Um jetzt das ganze Prozedere besser nachverfolgen und auch live in Aktion sehen zu können, hatte Alexander vor ein paar Tagen ein zweites Video erstellt, das das erste Tutorial ergänzt bzw. aktualisiert.

Viel Spaß beim Anschauen 📼

Die beiden hier vorgestellten Makros können übrigens hier heruntergeladen werden.

Permalink

Vimmy · Erweiterung lässt Steuerung des Safari mit Tastatur zu

Mit Tab Options hatte ich Anfang des Jahres schon eine Extension vorgestellt, mit der man den Safari um Tastaturkürzel erweitern kann; damals ging es allerdings nur um das Arbeiten mit Tabs.

Vimmy geht einen Schritt weiter und bietet weitere Tastaturkürzel an, die die Steuerung der Browsers per Maus weitestgehend überflüssig macht.

2017-07-05 11_57_10

Terminaljunkies werden sich zudem über die Nähe der neuen Shortcuts zum Text-Editor Vim freuen 😉

So kann man beispielsweise mit den Tasten h, j, k und l nach oben, unten, links und rechts scrollen. Mit shift+g bzw. gg scrollt man auf der Webseite ganz nach unten bzw. oben. Mit f werden Elemente wie Links, Bilder oder Knöpfe getriggert, auf die man daraufhin über weitere angezeigte Shortcuts zugreifen kann. Mit shift+k bzw. shift+j kann man zwischen den Tabs vor- und zurückspringen. Mit x schließt man Tabs u.s.w.

Eine genaue Auflistung aller verfügbaren Shortcuts sowie der Quellcode sind auf der Projektseite bei GitHub zu finden.

-> https://github.com/gggritso/Vimmy.safariextension

Permalink

Mac keyboard shortcuts

Wer meinen Artikel zu den OS X Tastatur-Shortcuts vor etwa genau 4½ Jahren verpasst hat, sollte sich diesen umfassenden und zudem sehr hübsch illustrierten Artikel von Matt Gemmell ansehen.

cmd-sign-aguDE

I recently wrote an article about being productive on a small screen, which mentioned my belief that the most effective route to productivity on a computer is learning the available keyboard shortcuts.

Permalink

UPDATE · Tipp · Google Chrome Extension „Amazing Tabs“

Ich verwende ja Vimium als eine der wenigen Google Chrome Erweiterungen. Alleine das Schließen via »x« eines Tabs ist die Installation wert.

Leider bietet Vimium keine Möglichkeit, alle Tabs – außer dem aktuellen Tab – zu schließen. Es gibt zwar mit Vimium Plus einen Fork – aber ich bin mittlerweile bei den Erweiterungen recht misstrauisch geworden.

Nun habe ich seit geraumer Zeit nach einer weiteren Möglichkeit gesucht, in Google Chrome per Tastenkürzel dieses Manko zu beheben. Das Zuweisen eines Tastenkürzel via Programmkurzbefehle in den OS X Systemeinstellungen scheitert, weil der Befehl in den Menüs der Menüzeile nicht auftaucht.

Update: Probieren geht über studieren. Mit den nachfolgenden Einstellungen funktioniert auch das Schließen aller anderen Tabs via Programmkurzbefehle:

131218_01

Nach unzähligen Suchen in den Google Supportdokumenten (sollte auch mal einer neu machen) erweist sich derzeit die Google Chrome Erweiterung Amazing Tabs als brauchbares Stück Software.

Die Software gewinnt in den Einstellungen keinen Schönheitspreis – tut aber vorzüglich was sie soll.

Linkliste: 

Amazing Tab Shortcuts
Amazing Tab Shortcuts
Entwickler: Thrustmaster
Preis: Kostenlos
Vimium
Vimium
Preis: Kostenlos
VimiumPlus
VimiumPlus
Entwickler: Jb55
Preis: Kostenlos

Nachfolgend der Vollständigkeit halber noch der Screenshot mit meinen aktuellen Einstellungen:

Optionen Amazing Tabs

Optionen Amazing Tabs