2017-08-23 1 views
0

Ich versuche mit AppleScript bestehende OmniFocus-Aufgaben zu finden und Projekte und Kontexte basierend auf bestimmten Regeln anzuhängen. Dies funktioniert, außer dass:Kopieren von Rich Text von der Eigenschaft eines Objekts in ein anderes

Wenn ich die neue Aufgabe erstellen, versuche ich die Eigenschaft direkt zu kopieren. Im OmniFocus-Wörterbuch heißt es, dass die note-Eigenschaft "Rich Text" ist, aber in der neuen Aufgabe scheint es reiner Text geworden zu sein (insbesondere Links im Text, die ich gerne behalten würde, verschwinden, aber es gibt noch andere Stil, der verschwindet)

on set_project_and_context(the_task, the_project, the_context) 
    tell application "OmniFocus" 
     tell front document 
      set task_name to name of the_task 
      set task_note to note of the_task 
      set new_text to task_name & " ::" & the_project & " @" & the_context 
      set new_tasks to (parse tasks into with transport text new_text with as single task) 
      set new_task to item 1 of new_tasks 
      set due date of new_task to missing value 
      set note of new_task to task_note # <- HERE IS WHERE I'M TRYING TO COPY THE NOTE 
      delete the_task 
     end tell 
    end tell 
end set_project_and_context 

ich bin ein Apple Neuling, so ist jede Hilfe dankbar;)

Antwort

0

Ich habe dieses Problem ein wenig unintelliglich gelöst, indem ich die neue Aufgabe erstellte und ihr Projekt und Kontext der bestehenden Aufgabe zuordnete, so dass ich die Notiz nicht neu erstellen muss. Es gibt wahrscheinlich bessere Möglichkeiten, um das Projekt und Kontext zu holen, obwohl ich nicht einen besseren Weg finden könnte, es zu tun, die verschachtelten Projekten beteiligt zu finden/Kontexte

on set_project_and_context(the_task, project_text, context_text) 
    tell application "OmniFocus" 
     tell front document 
      set task_name to name of the_task 
      set new_text to task_name & " ::" & project_text & " @" & context_text 
      set new_tasks to (parse tasks into with transport text new_text with as single task) 
      set new_task to item 1 of new_tasks 

      set context of the_task to context of new_task 
      set the_project to containing project of new_task 
      set project_name to name of the_project 
      move the_task to end of tasks of the_project 
      delete new_task 
     end tell 
    end tell 
end set_project_and_context 
1

Sie können die Notiz Eigenschaft direkt nicht kopieren, da die neue Note ohne alle Klartext würde das Stile und Links. Um die Formatierung beizubehalten, müssen Sie die Eigenschaft style jedes Absatzes der note-Eigenschaft festlegen. Ich habe einen Handler hinzugefügt, um es zu setzen.

Vielleicht hilft das.

Code:

on set_project_and_context(the_task, the_project, the_context) 
    tell application "OmniFocus" 
     tell document 1 
      set task_name to name of the_task 
      set task_note to note of the_task 
      set new_text to task_name & " ::" & the_project & " @" & the_context 
      set new_tasks to (parse tasks into it with transport text new_text with as single task) 
      set new_task to item 1 of new_tasks 
      set due date of new_task to missing value 
      my SetNote(the_task, new_task) -- NEW HANDLER 
      delete the_task 
     end tell 
    end tell 
end set_project_and_context 

on SetNote(old_task, new_task) 
    using terms from application "OmniFocus" 
     set text of note of new_task to text of note of old_task 
     set lst_paragraphs to (every paragraph of note of old_task) 
     repeat with i from 1 to count lst_paragraphs 
      set style of paragraph i of note of new_task to (style of paragraph i of note of old_task) 
     end repeat 
    end using terms from 
end SetNote 
+0

Vielen Dank für dieses, leider war es nicht für mich arbeiten wenn es in der Mitte des Absatzes einen Stil (wie eine Linie) gab. Ich habe 'paragraph' in' word' geändert, was funktioniert hat, aber seltsam aussah und langsam war. Ich kam tatsächlich mit einem grundlegend besseren Ansatz, den ich als eine andere Antwort teilen werde –

0

Apple selbst nicht versteht Text gestylt, und es gibt kein Standardverfahren für Apps beigefügten Text mit Stilinformationen zurückzukehren, so:

set task_note to note of the_task 

kehrt Nur einfacher Text.

Sie müssen die Anwendung sagen, die Rich-Text direkt von einem Objekt zum anderen kopieren:

set note of new_task to note of the_task 

ob dieser Befehl funktioniert davon abhängen, wie gut die Scripting-Unterstützung der App umgesetzt wird; Sie müssen es nur versuchen und sehen.

+0

Wenn ich versuche, dass ich bekomme OmniFocus hat einen Fehler: Falscher Typ für Notiz. Sollte Text oder Rich Text, "OSPropertyScriptText" 'sein. Liegt das vielleicht daran, dass die Skriptunterstützung von OmniFocus nicht gut ist? –

+0

Ich habe keine Kopie von OF, um damit zu spielen, also rate ich die Syntax. Omni hat eine gute Benutzerunterstützung und Foren, also fragen Sie zuerst nach. Ansonsten experimentiere. Versuchen Sie 'Text der Note von new_task auf Text der Note der_Task' zu setzen,' Text der Note von new_task auf Note der_Task' einzustellen, und alle anderen Variationen, die Sie sich vorstellen können, um zu sehen, ob Sie das gewünschte Ergebnis erzielen können. Schlampiges, schlecht spezifiziertes Verhalten und frustrierend unvollständige Dokumentation sind Standard "features" der meisten "AppleScriptable" -Apps; manchmal muss man es nur mit einem Stock stecken, in der Hoffnung, über etwas zu stolpern, das funktioniert. – has

+0

Ja, das habe ich bis jetzt schon erlebt;). Vielen Dank! –

Verwandte Themen