Applescript / Automatisierung für "Verweis auf Auswahl kopieren"

@jrickmd iebes Forum, liebes Support-Team,

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?

Beste Grüße
Jan

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.

Lieber Chrillek,

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

Diese Parameter sind nicht nötig, s. New "selected text" AppleScript property - #20 by cgrunenberg

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…

Also geht es um reine Textdokumente? Das könnte es einfacher machen. Was funktioniert denn nicht?

Und wozu ist theURL gut? Das scheint mir nicht benutzt zu werden.

Ich gucke mir das Ganze später mal genauer an.

Das ist im Augenblick per AppleScript nicht möglich, wird aber in der nächsten Version unterstützt.

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…

Beste Grüße
Jan

Danke! Es wäre großartig, wenn es unterstützt werden würde.

Grüße
Jan

Aber ist das nicht schon theReferenceUrl? Mir ist nicht klar, wozu man eine URL braucht, die an einem attribute run hängt.

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.

Grüße
Jan

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.

Lieber @cgrunenberg,

ist schon absehbar, wann die Version 3.9.1 veröffentlicht (mit AppleScript-Unterstützung für ausgewählten Text in PDFs) veröffentlicht wird?

Bald :slight_smile: