Plug-In: Copy Task/Project Link to Clipboard as Markdown
Here's an Omni Automation plug-in for OmniFocus that copies links to the selected item (task or project) along with links to the item’s sub-tasks, to the clipboard in Markdown format. Perfect for pasting into a Craft document, or other application that accepts Markdown content as input.
Return to: OmniFocus Plug-In Collection
Copy Task/Project Link to Clipboard as Markdown
/*{"type": "action","targets": ["omnifocus"],"author": "Otto Automator","identifier": "com.omni-automation.of.item-link-as-markdown","version": "1.1","description": "Copies a link to the selected task or project to the clipboard in Markdown format. There is an option to include links to the item’s sub-tasks as well.","label": "Item Link as Markdown","shortLabel": "Item Link as Markdown","paletteLabel": "Item Link as Markdown","image": "arrow.up.doc.on.clipboard"}*/(() => {const action = new PlugIn.Action(async function(selection, sender){try {if (selection.tasks.length === 1){var selectedItem = selection.tasks[0]var objectType = "task"} else {var selectedItem = selection.projects[0]var objectType = "project"}itemID = selectedItem.id.primaryKeyitemTitle = selectedItem.nameitemMarkdown = `[${itemTitle}](omnifocus://task/${itemID})`checkboxSwitch = new Form.Field.Checkbox("shouldIncludeSubTasks","Include links to sub-tasks",true)inputForm = new Form()inputForm.addField(checkboxSwitch)formPrompt = "Copy Markdown Links to Clipboard:"buttonTitle = "Continue"formObject = await inputForm.show(formPrompt, buttonTitle)shouldIncludeSubTasks = formObject.values["shouldIncludeSubTasks"]if(shouldIncludeSubTasks){selectedItem.tasks.forEach(task => {var taskID = task.id.primaryKeyvar taskTitle = task.namevar taskMarkdown = `- [${taskTitle}](omnifocus://task/${taskID})`itemMarkdown += "\n" + taskMarkdown})}console.log(itemMarkdown)Pasteboard.general.string = itemMarkdownnew Alert("Markdown","The item links as Markdown have been copied to the clipboard.").show()}catch(err){if(!err.message.includes("cancelled")){new Alert(err.name, err.message).show()}}});action.validate = function(selection, sender){return (selection.tasks.length + selection.projects.length === 1)};return action;})();