erstmal vielen Dank für das Update auf 3.9 mit der Möglichkeit “Deeplinks” für markierte Textabschnitte zu generieren. Ich würde die Links gerne für eine meiner Automatisierungen nutzen. Leider gibt die Menuoption “Verweis auf Auswahl kopieren” nur im Pop-Up-Menu, das man über dem markierten Abschnitt erzeugen kann und nicht in der Menüleiste. Somit ist die Option auf die schnelle nicht per Applescript oder auch Keyboard maestro zu erreichen.
Ein Applescript, das ich im Forum bei @jrickmd gefunden habe, funktioniert leider nicht, da es den “&Start=”-Wert des Links nicht korrekt berechnet. Ich weiß, dass die Links auch nur mit “&search=” Parameter funktionieren würden, aber diese Links können natürlich fehlerhaft sein, wenn nach häufigen Wörtern auf der Seite gesucht wird…
Daher meine Frage/Bitte: Gibt es ein funktionierendes Applescript zur Generierung der (x-devonthink-item://)-DeepLinks mit “&Start=” und “&length=” und “&search=” für einen markierten Textabschnitt in DT3-Dokumenten (vornehmlich PDFs)? Oder eine andere möglichkeit der Automatisierung dieses Vorgangs?
Nicht, dass ich wüsste. Und ich würde es auch eher in JavaScript schreiben, wegen der besseren (bzw überhaupt vorhandenen) String-Operationen.
So oder so wird sich ein Script die aktuelle Auswahl besorgen und damit Das Richtige (™) tun müssen. Dazu sind vielleicht auch Funktionen aus Apples Frameworks nötig.
Edit nach ein bisschen Lesen: es scheint nicht so einfach zu sein, die aktuelle Auswahl zu bekommen, ohne über das Clipboard zu gehen. Fragen dazu gibt es einige, gute Antworten nicht.
Mir würde es schon reichen, wenn das folgende Skript funktionieren würde, was es auch tut, bis auf einen Fehler im “&start=” Wert der “x-devonthink-link://…” URL. Vielleicht hast Du ja eine Idee, wie man den richtigen Startpunkt per scipt ermittelt?
tell application id "DNtp"
set fWindow to its front window
if exists fWindow then
set refText to a reference to selected text of fWindow
if exists refText then
set attr to a reference to (attribute runs of refText)
set theText to text of attr
set theText to first item of theText
set theURL to URL of attr
set theURL to first item of theURL
-- build link
set theRecord to content record of fWindow
set allText to plain text of theRecord
set theStart to offset of theText in allText
set theStart to theStart - 1
set theLength to count of theText
set theLink to reference URL of theRecord & ¬
"?page=" & current page of fWindow & ¬
"&start=" & (theStart as string) & ¬
"&length=" & (length of theText) as string
if missing value is not theURL then
set theText to "[" & theText & "](" & theURL & ")"
end if
set returnText to ((theText & "[^" & theStart as string) & "]}" & return & return & ¬
"[^" & theStart as string) & "]: " & theLink
return returnText
end if
end if
return ""
end tell
Danke für die schnelle Antwort!
Aus dem von Dir verlinkten Thread habe ich ja das o.g. Skript, den habe ich natürlich aufmerksam gelesen.
In den Texten, die ich so bearbeiten muss, sollen allerdings auf der gleichen Seite multiple, gleichlautende Textabschnitte verlinkt werden, somit wäre es schon hilfreich mit den Parametern “&Start=” und “&length=” die exakte Position auf der Seite zu adressieren und nicht nur das erste Vorkommen des “&Search=” Parameters…
theURL extrahiert den x-devonthink-item://UUID Link, aus dem PDF (entsprechend der Menüfunktion: Bearbeiten > Verweis kopieren). Wie gesagt, das skript funktioniert so halb, lediglich der “&start=” Wert wird falsch berechnet und stimmt nicht vollständig mit dem Link überein, der in die Zwischenablage generiert wird, wenn man im Pop-Up-Menu "Verweis auf Auswahl kopieren” auswählt. Danke für Deine Mühe, sich diesen Dingen anzunehmen. Ich bin selbst eher “Hobby-Automatisierer” und komme hier wohl an meine Grenzen…
Das kann ich auch nicht sagen. Eigentlich würde mich nur die o.g. Variable theLink interessieren, die wie gesagt bis auf den “&start=” Parameter den gewünschten Link ausgibt… Die gibt allerdings nur die Position der Markierung im Text in Bezug auf den gesamten Textkorpus der Datei aus:
set allText to plain text of theRecord
set theStart to offset of theText in allText
Man bräuchte nach meinem Verständind alledings die “Startposition” der zu verlinkenden Textmarkierung in relation zur Zeichenanzahl der Seite (current page of fWindow).
Hm. current page sehe ich in DT nur in Bezug auf PDFs. Und so etwas wie die “Seitenzahl” ergibt bei normalem Text (inkl. Markdown) auch wenig Sinn. Du sagst ja leider bisher gar nicht, um welche Art von Dokumenten es überhaupt gehen soll.
Wenn es nun um PDFs geht, dann könnte man das vermutlich hinbekommen, allerdings mE nur durch Nutzen von PDFKit. Aber das müsstest Du halt sagen. Die einzige andere Variante, bei der page irgendeinen Sinn hätte, wäre vielleicht RTF.
Obwohl ich daran inzwischen Zweifel habe – es scheint schlicht gar kein Konzept von “Seite” für RichText zu geben. Vermutlich, weil jedes Programm einfach Ränder, Seitengröße etc. ändern könnte, so dass die Position eines Texts “auf einer Seite” ein moving target wäre.
Ich sehe jedenfalls per Script im Moment keine zuverlässige Möglichkeit, die Position der Auswahl zu finden. Am Besten auf die angekündigte Neuerung warten…
Vielen Dank für Deine Antwort. In der Tat soll es um PDFs gehen. Aber wie @cgrunenberg schon geschrieben hat, soll es in der nächsten Version via Applescript unterstützt werden. Darauf warte ich dann einfach.
Die mit Version 3.9 eingeführten Links auf ausgewählten Text oder Annotationen unterstützen nur PDF-Dokumente, das wird sich auch nicht ändern, da das bei anderen Formaten nicht oder nicht zuverlässig möglich ist. Nur die AppleScript-Unterstützung wird noch ausgebaut.