In case anyone else needs it, I hacked together an example that cycles through tag values, rather than tags themselves. I have very little experience with scripting so if anyone else has a better way to achieve this please let me know
A GTD status cycle that cycles through next action
, later action
, waiting action
and someday action
. If the tag @actionStatus
doesn’t exist it’ll create one and default to the start of the cycle (next action
).
function TaskPaperContextScript(editor, options) {
let outline = editor.outline
let selection = editor.selection
outline.groupUndoAndChanges(() => {
editor.selection.selectedItems.forEach((item) => {
if (item.getAttribute("data-actionStatus") === "next action"){
item.setAttribute("data-actionStatus", "later action")
} else if (item.getAttribute("data-actionStatus") === "later action"){
item.setAttribute("data-actionStatus", "waiting action")
} else if (item.getAttribute("data-actionStatus") === "waiting action"){
item.setAttribute("data-actionStatus", "someday action")
} else {
item.setAttribute("data-actionStatus", "next action")
}});
})
editor.moveSelectionToItems(selection)
}
Application("TaskPaper").documents[0].evaluate({
script: TaskPaperContextScript.toString()
});