Plug-In: Markdown Link for Object
This plug-in generates a link, in markdown format, to the selected tag, folder, project, or task, and places the link on the clipboard.
TIP: Hold down Shift key when running plug-in to summon preferences dialog where you can optionally select an alert sound to be played when the link is created and placed on the pasteboard.
Return to: OmniFocus Plug-In Collection
Markdown Link for Object
/*{"type": "action","targets": ["omnifocus"],"author": "Otto Automator","identifier": "com.omni-automation.of.markdown-link-for-object","version": "1.0","description": "This plug-in generates a link, in markdown format, to the selected tag, folder, project, or task, and places the link on the clipboard. TIP: Hold down Shift key when running plug-in to summon preferences dialog.","label": "Markdown Link for Object","shortLabel": "Markdown Link for Object","paletteLabel": "Markdown Link for Object","image": "link.badge.plus"}*/(() => {function playSystemAlert(alertFilename){if(!alertFilename.endsWith(".aiff")){alertFilename = alertFilename + ".aiff"}alertFilename = alertFilename.charAt(0).toUpperCase() + alertFilename.slice(1)sysSoundsFldr = URL.fromString("/System/Library/Sounds/")urlComps = URL.Components.fromURL(sysSoundsFldr, false)urlComps.path = alertFilenamesoundFileURL = urlComps.urlRelativeTo(sysSoundsFldr)audioAlert = new Audio.Alert(soundFileURL)Audio.playAlert(audioAlert)}var preferences = new Preferences() // NO ID = PLUG-IN IDvar soundNames = ["Basso","Blow", "Bottle", "Frog", "Funk", "Glass", "Hero", "Morse", "Ping", "Pop", "Purr", "Sosumi", "Submarine", "Tink"]const action = new PlugIn.Action(async function(selection, sender){try {storedBoolean = preferences.readBoolean("shouldPlaySound")if(storedBoolean === null){preferences.write("shouldPlaySound", shouldPlaySound)var shouldPlaySound = false} else {var shouldPlaySound = storedBoolean}storedSoundIndx = preferences.readNumber("confirmationSoundIndx")if(storedSoundIndx === null){preferences.write("storedSoundIndx", 5)var storedSoundIndx = 5var confirmationSound = "Glass"} else {var confirmationSound = soundNames[storedSoundIndx]}if(app.shiftKeyDown){checkSwitchField = new Form.Field.Checkbox("shouldPlaySound","Play sound when creating the Markdown link",shouldPlaySound)soundsOptionsMenu = new Form.Field.Option("confirmationSoundIndx","Confirmation Sound",[0,1,2,3,4,5,6,7,8,9,10,11,12,13],soundNames,storedSoundIndx)inputForm = new Form()inputForm.addField(soundsOptionsMenu)inputForm.addField(checkSwitchField)formPrompt = "Plug-in Options:"buttonTitle = "Continue"formObject = await inputForm.show(formPrompt, buttonTitle)booleanValue = formObject.values['shouldPlaySound']preferences.write("shouldPlaySound", booleanValue)var shouldPlaySound = booleanValueindx = formObject.values['confirmationSoundIndx']preferences.write("confirmationSoundIndx", indx)var confirmationSound = soundNames[indx]}selectedItem = selection.databaseObjects[0]if (selectedItem instanceof Folder){var objType = "folder"} else if (selectedItem instanceof Tag){var objType = "tag"} else {var objType = "task"}ID = selectedItem.id.primaryKeyurlStr = `omnifocus:///${objType}/${ID}`markdownLink = `[${selectedItem.name}](${urlStr})`Pasteboard.general.string = markdownLinkif(shouldPlaySound && Device.current.mac){playSystemAlert(confirmationSound)}}catch(err){if(!err.causedByUserCancelling){console.error(err.name, err.message)new Alert(err.name, err.message).show()}}});action.validate = function(selection, sender){// selection options: tasks, projects, folders, tags, databaseObjects, allObjectsreturn (selection.databaseObjects.length === 1)};return action;})();