Sonntag, 1. März 2020
Evernote Tag Autocomplete Macro Version 2
EDIT (08.10.2020) - Please note: A Note As Regards To My Evernote Macros And The New Evernote Client Version 10
(This is a follow up post to Keyboard Maestro Tag Autocomplete Makro für Evernote unter macOS.)
This macro enhances the tagging functionality of Evernote's native macOS client by providing a way to search for tags in an "unanchored" way, that is, if I have a tag "gotomuseum", I can find this tag when searching for "museum", whereas the native tag autocomplete would only find the tag, if I typed at least "gotom". This is helpful, when having lots of tags in a deeply nested tag hierarchy.
How it works
This macro actually consists of two macros:
- A collector macro, that reads and parses Evernote's tags
- A selector macro, that displays a search box and pastes the selected tag
The collector macro could be bound to a hot key trigger or could be run in a time controlled manner (e. g. every hour). I have bound it to a hot key, so it's easy to invoke when I rcently added a tag, but it's not yet showing up in the selector.
So what you would do to use this:
- You just create tags as usual
- You invoke the collector macro
- When tagging a note you invoke the selector macro, search for the tag you want and the tag is inserted where your cursor is
Installation
Just download the file and drop it onto the Keyboard Maestro App Icon in the dock, or double click the file.
Evernote Autocomplete Macros - v2
(application/octet-stream, 12 KB)
Donnerstag, 20. Februar 2020
App Abos
Hab nach Ewigkeiten 1Password aktualisiert. Jetzt also als Abo, obwohl ich letztes Jahr und zuvor Abos schwierig fand. Warum? "Kontingente" Gründe gab es in Form von Podcastgesprächen von ATP und Back To Work (etwa ab Minute ) zum Thema App-Bepreisung und App-Entwicklung. (Ist immer noch sehr schwer zu finden, wo man was mal in Podcasts gehört hat…)
Mit Liebe gemachte Apps, die eine spezifische Nische füllen und/oder an sich schon eine "ausreichend perfekte Form" angenommen haben, haben Schwierigkeiten ihre User - bei aller Liebe zurück - zu einem Update auf die nächste Version zu bewegen. Also kein Wunder, dass Apps andere Modelle suchen, wie z. B. das Abo. Dies stellt zum einen Sicher, dass Apps, die ausreichend perfekt sind, auch noch in ein paar Jahren existieren , supportet werden und weiterhin inkrementel besser werden. Und 1 Password ist es wert. Ich habe nachgeschaut, was ich für 1Password bisher bezahlt habe:
- 31.03.2010 - 1Password (academic license) (Mac) - 21,99 Euro
- 16.12.2012 - 1Password (iOS) - 6,99 Euro
- 11.01.2014 - 1Password - 18,88 Euro (24,99 Dollar)
- Gesamt 47,86 Euro
- Monatliche Kosten für die Benutzung (03/2010 bis heute - 119 Monate): ~0,40 Euro
Jetzt werde ich ~2,77 Euro (2,99 Dollar) also 2,37 Euro mehr (also fast das Siebenfache) zahlen. Das ist aushaltbar. Es gibt einige Apps, für die ich bereit wäre in dieser Weise zu bezahlen. Keyboard Maestro gehört definitiv dazu.
Als User mit begrenzten Mitteln hat man, sollte sich dieses Modell zunehmend durchsetzen, allerdings das Problem, dass man nicht für alle Apps wird zahlen können. Ein anderes Beispiel: Die Tagebuch-App DayOne.
- 2011? - Day One (Mac) - ~7,31 Euro (10$ in 2011)
- 2011? - Day One (iOS) - ~3,65 Euro (5$ in 2011)
- 04.02.2016 - Day One 2 (Mac) - 19,99 Euro
- 04.02.2016 - Day One 2 (iOS) - 4,99 Euro
- Gesamt 35,94
- Monatliche Kosten für die Benutzung (von ca. 02/2011 bis ca. 07/2017 - 77 Monate): ~0,47 Euro
Der heutige Preis liegt bei ~2,70 (2,92 Dollar), kostet also 2,23 Euro mehr (also fast das Sechsfache).
All diese Aufstellungen sind natürlich nur grobe Annäherungen, weil hier die Inflation nicht wirklich beachtet worden ist, aber das hätte den hier gemachten Punkt nur unterstrichen.
Wenn also alle Apps zukünftig das Abomodell verfolgen würden und dies außerdem implizieren würde, dass ich mindestens das Sechsfache für die App bezahlen müsste, dann hätte ich sehr bald ein Problem.
Auch hier ein grober Überschlag: Für alle infrage kommenden - das heißt mindestens monatlich genutzten Apps (ohne schon jetzt als Abo-Service genutzte Dienste wie Evernote) - würde ich heute nach einer kleinen Schätzung ca. 30-50 Euro pro Monat nur für Apps bezahlen (Mac und iPhone). Das hieße, im Augenblick, sollte das mit der sechs- bis siebenfachen Verteuerung hinhauen, zahle ich wahrscheinlich eher 5 im Durchschnitt.
Sind 50 Euro viel für Dinge, die in einen Bereich fallen, mit dem ich tagtäglich die meiste Zeit verbringe? Die Frage ist unvollständig, weil neben Apps und Abos für Services auch Spiele, eine digitale Zeitung, Patreon (für Podcasts) und Co. dazu gehören. Da kommt ganz schön was zusammen.
In manchen Fällen kann man gegensteuern. Man kann sich z. B. einschränken. Keine Apps mehr kaufen. Man kann auch schauen, ob man "Lifetime Subscriptions" kaufen kann, also wo man am Ende doch wieder nur einmal zahlt. Man kann nach freien Alternativen suchen. Oder man kann - so wie ich - viele Jahre warten bis man dann aus mehr oder weniger guten Gründen auf eine Abo-Version updated. Oder schauen, ob es nicht auch ohen geht.
Aber trotzdem führt diese Tendenz der zunehmenden Verteuerung doch dazu, dass man sich weniger Bezahl-Apps anschaut.
Oder wenigstens ich. Es ändert sich meine Grundeinstellung: Anstatt "Ich möchte den Möglichkeitsraum von dem was Apps sind und sein können explorieren", sage ich zunehmend: "Kann ich das was mich stört mit freier Software oder meinen bestehenden Apps gut genug abstellen?". Statt dem Interesse an Neuem, steht das Abstellen von Störungen vermehrt im Mittelpunkt. Erst in einem zweiten Schritt geht es um Neues - nämlich wenn es um den Austausch eines bestehenden Programms durch ein Neues geht. Aber das ganz andere Neue, wie es z. B. Drafts für den Mac sein könnte, spielt immer weniger Rolle. Die Stimme in meinem Kopf "Dafür kann ich nicht auch noch Geld ausgeben" wird lauter.
Sonntag, 9. Februar 2020
Keyboard Maestro Tag Autocomplete Makro für Evernote unter macOS
Das Problem
Ich benutze Evernote als meinen Zettelkasten, wie ich ja neulich
beschrieben habe. Teil
des Zettelkastens - aber nicht nur des Zettelkastens - ist ein baumartig aufgebautes Stichwortverzeichnis, meine "hierarchische Projektliste":
Eine große baumartige Struktur, in der jedes Ding (wenigstens) einen
Platz hat. Beispiel:
00-meta.01-setup.03-reading-writing.00-notizen.02-evernote
Da Tags sich in Evernote in beliebiger Tiefe verzweigen lassen, ist
jedes Teilsegment (d. h. 00-meta und 01-setup) jeweils ein eigenes
Stichwort, welches hierarchisch ineinander verschachtelt ist. Da aber
aus technischen Gründen Evernote nur das Tag selbst, nicht aber die
sie enthaltenden Eltern- und Großelterntags anzeigt, wird die gesamte
Hierachie bis zum jetzigen Stichwort immer mitgeschrieben, d. h.
obiges Beispiel sieht praktisch so aus:
- 00-meta
- 00-meta.01-setup
- 00-meta.01-setup.03-reading-writing
- 00-meta.01-setup.03-reading-writing.00-notizen
- 00-meta.01-setup.03-reading-writing.00-notizen.02-evernote
Derzeit unterstützt der native Evernote-Client keine ausreichend
flexible Tag-Autovervollständigung. So würde ich, wenn ich in der
Stichwortleiste nach evernote
suchen würde, das entsprechende Tag
nicht finden.
Bevor das passende Tag für Evernote überhaupt als auswählbares Stichwort
im Tag-Feld auftaucht, müsste ich wenigstens
00-meta.01-setup.03-reading-writing
hinschreiben.
Logischerweise kann sich das niemand merken. Würde ich aber die
Baumstruktur meines Tagsystems auflösen, verlöre ich viele Vorzüge eines
solchen Systems. Also braucht es eine andere Lösung.
Für lange Zeit habe ich entsprechende Tags lediglich von einer
Tag-Übersicht herauskopiert. Aber das war umständlich und führte
tendenziell dazu, dass man Tags weniger häufig benutzt hat, als man es
vielleicht gewollt hätte.
Die Lösung
Ein Hoch auf Keyboard Maestro!
Keyboard Maestro ist ein Automatisierungstool für den Mac, mit dem man
in vielen Fällen Apps um Funktionalitäten oder Integrationen erweitern
kann, die einem fehlen. Wir machen es uns hier zu nutze, um eine
funktionierende Stichwort-Autovervollständigung zu bauen.
Schritt 1
Wie gesagt, habe ich in Evernote eine Notiz mit allen Tags die auf den
Namen Tagliste
hört.
Diese Liste müssen wir nun nur noch auslesen bzw. parsen. Um das zu
ermöglichen machen wir uns einen weiteren Vorteil der Mac-Plattform zu
Nutze: Die Applescript-Unterstützung des
Evernote-Clients.
tell application "Evernote"
set mysearch to find notes "intitle:Tagliste"
set mynote to item 1 of mysearch
return HTML content of mynote
end tell
Dieses Applescript macht folgendes:
- Es sucht in Evernote nach Notizen die im Titel
Tagliste
enthalten...
- ...und wählt aus den Suchergebnisse das erste aus...
- ...und anschließend gibt es den Inhalt der entsprechenden Notiz als
HTML aus
Wir halten HTML was so aussieht:
<div id="en-note"><ul><li><div>xx-archiv</div></li>...
Schritt 2
Diesen langen HTML-Wurm müssen wir nun so aufbereiten, dass er uns für
eine Autovervollständigung dienen kann. Auch wenn man für HTML
eigentlich keine regulären Ausdrücke verwenden
sollte,
so ist das von uns vorgefundene HTML einfach genug um es dennoch zu tun.
(?<=(<li><div>))([a-zA-Z0-9().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|`~äöüÄÖÜß_ \n])+(?=(</div></li>))
Diese RegExp tut folgendes (Visualisierung von hier):
Kurz: Es wird alles gefunden was zwischen
<li>
und <div>
Tags ist.
Schritt 3
Schließlich braucht es ein Makro, welches bei Bedarf die obigen Schritte
durchführt und das Ergebnis vorhält.
Immer wenn ich die Tastenkombination ⌃⌥⇧⌘#
drücke passiert folgendes:
- die Variable
TagsFound
wird zurückgesetzt um Duplikate zu
vermeiden
- das Applescript aus Schritt 1 wird ausgeführt und liefert uns HTML,
welches wir in der Variable
Tags
speichern
- Hier iterieren wir über jeden gefundenen Match unseres Regulären
Ausdrucks (Variable
TagsMatch
) aus Schritt 2 und führen für jedes
Stichwort die folgenden Aktionen durch
- wir speichern das Gefundene in der Variable
TagsCaptured
- wir fügen den Inhalt von
TagsCaptured
und einen Zeilenumbruch
am Ende an die Variable TagsFound
an
- Wir löschen
Tags
, TagsMatch
, TagsCaptured
, da sie nicht mehr
gebraucht werden.
- Schließlich geben wir eine Notification aus, dass die Tags aus
Evernote gefunden und aktualisiert worden sind.
Das Ergebnis ist eine Variable die in jeder Zeile ein Tag enthält:
xx-archiv
00-meta
00-meta.00-baum
00-meta.01-setup
00-meta.01-setup.01-taskmgmt
00-meta.01-setup.01-taskmgmt.01-timewarrior
00-meta.01-setup.01-taskmgmt.02-taskwarrior
Hier das Makro zum Download: Evernote - ZKN - Tag
Collection
[ (application/octet-stream, 6 KB) ]{.small}
Schritt 4
Nun müssen wir die so befüllte Variable nur noch von KeyboardMaestro in
geeigneter Form anzeigen lassen. Das geht so:
Immer wenn ich die Tastenkombination ⌥⇧⌘#
drücke (also ohne Control)
passiert folgendes:
- Es wird ein Suchschlitz eingeblendet werden, dessen Inhalt sich aus
der Variable
TagsFound
speist und die Auswahl (d. h. den Eintrag
also in unserem Falle das Tag) in die Variable TagTmp
speichert.
- Wir fügen den Inhalt der Variable
TagTmp
an der Position ein, wo
wir das Makro ausgeführt hatten.
- Wir löschen die Zwischenablage 0, d. h. unser gerade eben
eingefügtes Stichwort, um nicht unsere eigentliche Zwischenablage -
vielleicht habe ich ja z. B. einen Textschnipsel für einen neuen, zu
taggenden Zettel in der Zwischenablage - zu "löschen".
Hier das Makro zum Download: Evernote - ZKN - Tag
Selection
[ (application/octet-stream, 2 KB) ]{.small}
Ergebnis
Das Ergebnis sieht dann so aus:
Anzumerken bleibt, dass man das Tag Collection Makro nur ausführen muss,
wenn sich was an den Tags geändert hat und nicht vor jeder
Stichwortsuche.
Links und Inspiration