It’s set to increase @due date value by one day. But you can change the options to target another tag. You can change the offset value to offset + or - and change to unit to any supported in the time format:
As a footnote, for anyone using KeyBoard Maestro to attach keystrokes (or other triggers) to scripts like this, here is an example of how you can wrap a script like Jesse’s in a form that gets its variables (i.e. which tag type ? how many days or weeks of adjustment ?) from Keyboard Maestro (if KM is installed), or otherwise gets them from literal default strings in the text:
JavaScript source, for running either in a Keyboard Maestro Execute JavaScript for Automation action, or from Script Editor or any other launcher:
(If Keyboard Maestro is not found, or its engine does not contain the incTag and incOffset variables, then the defaults at the bottom of the script are used)
// Nudge Taskpaper dates in selection
// Adjust dates in given tag type by given offset
// Keyboard Maestro version
// Rob Trew
(function () {
'use strict';
// TASKPAPER CONTEXT *************************************************
function TaskPaperContext(editor, options) {
var selection = editor.selection,
selectedItems = selection.selectedItems,
strAttrib = 'data-' + options.tag,
strOffset = options.offset,
// if there is no unit after the number, add a default 'd'
strDelta = isNaN(strOffset) ? strOffset : strOffset + 'd';
editor.outline.groupUndoAndChanges(function () {
selectedItems.forEach(function (item) {
var strDate = item.getAttribute(strAttrib);
item.setAttribute(
strAttrib,
DateTime.format(
strDate ? strDate + strDelta :
'today'
)
);
});
});
editor.moveSelectionToItems(selection);
}
// JAVASCRIPT FOR AUTOMATION CONTEXT *********************************
// (for checking whether Keyboard Maestro is installed)
// appIsInstalled :: String -> Bool
function appIsInstalled(strBundleId) {
ObjC.import('AppKit');
return ObjC.unwrap(
$.NSWorkspace.sharedWorkspace
.URLForApplicationWithBundleIdentifier(
strBundleId
)
.fileSystemRepresentation
) !== undefined;
}
// ****** MAIN ********************************************************
// 1. If Keyboard Maestro is installed,
// look for *incTag* and *incOffset* variables in the KM Engine
var strKMEid = "com.stairways.keyboardmaestro.engine",
kmVars = appIsInstalled(strKMEid) ? Application(strKMEid)
.variables : {},
varTag = kmVars.incTag,
varOffset = kmVars.incOffset;
// 2. Run the TaskPaper 3 script,
// using manual defaults for tag and offset if there are no KM values
var ds = Application('com.hogbaysoftware.TaskPaper3')
.documents();
if (ds.length) {
return ds[0].evaluate({
script: TaskPaperContext.toString(),
withOptions: {
// Keyboard Maestro 'incTag' variable
// OR a literal string default
tag: (varTag && varTag.value()) || 'due',
// Keyboard Maestro 'incOffset' variable
// OR a literal string default
offset: (varOffset && varOffset.value()) || '+1d'
}
});
}
})();
For anyone running into errors with @complexpoint’s excellent KM macro while running current versions of TP and mac OS, change the part of line 72 of the JXA in the KM macro that reads
com.hogbaysoftware.TaskPaper3
to
TaskPaper.
That got me up and running. (I’m currently using TaskPaper 3.7.7 (319) and macOS Mojave (10.14b6).)
PS: @complexpoint rocks! Virtually anytime I feel the need to create a TaskPaper script, I find that @complexpoint has already made one. Thanks so much!