Action
Markdown List
UPDATES
2 days ago
Add configured value support to change list character
Toggle Markdown list for selected lines, maintaining indentation.
Steps
-
configurationKey
name List character
key markupCharacter
-
script
// Toggle tasks marks on selected lines let listMark = "-" if (context.configuredValues["markupCharacter"]) { listMark = context.configuredValues["markupCharacter"] } // grab state let [lnStart, lnLen] = editor.getSelectedLineRange(); let lnText = editor.getTextInRange(lnStart, lnLen); let [selStart, selLen] = editor.getSelectedRange(); // just add mark if empty line if (lnText.length == 0 || lnText == "\n") { editor.setSelectedText(`${listMark} `); editor.setSelectedRange(selStart + listMark.length + 1, 0); } else { // create line array and tracking vars let lines = lnText.split('\n'); let startOffset = 0; let lengthAdjust = 0; let flTrailing = false; if (lines[lines.length - 1] == "") { lines.pop(); flTrailing = true; } let newLines = []; const re = /^(\s*)?([-\*] )?(.*)/; const containsRe = /^(\s?)([-\*] )/; // determine if we are removing or adding marks let flRemoving = true; for (let line of lines) { if (line.length > 0 && !line.match(containsRe)) { flRemoving = false; } } if (!flRemoving) { // add marks let isFirst = true; for (var line of lines) { const match = re.exec(line); if (match[2] || line.length == 0) { newLines.push(line); } else { let prefix = match[1]; let suffix = match[3]; if (!prefix) { prefix = ""; } if (!suffix) { suffix = ""; } newLines.push(`${prefix}${listMark} ${suffix}`); if (isFirst) { startOffset = listMark.length + 1; } else { lengthAdjust += (listMark.length + 1); } } isFirst = false; } } else { // remove marks let isFirst = true; for (let line of lines) { if (line.trim() == "") { newLines.push(line); continue; } const match = re.exec(line); let prefix = match[1]; let suffix = match[3]; let state = match[2]; if (!prefix) { prefix = ""; } if (!suffix) { suffix = ""; } if (suffix.startsWith(" ")) { suffix = suffix.substr(1); if (isFirst) { startOffset -= 1; } else { lengthAdjust -= 1; } } newLines.push(`${prefix}${suffix}`); if (isFirst) { startOffset -= state.length; } else { lengthAdjust -= state.length; } isFirst = false; } } // update text and selection if (flTrailing) { newLines.push(""); } let newText = newLines.join("\n"); editor.setTextInRange(lnStart, lnLen, newText); editor.setSelectedRange(selStart + startOffset, selLen + lengthAdjust); }
Options
-
After Success Nothing Notification Error Log Level Error
Items available in the Drafts Directory are uploaded by community members. Use appropriate caution reviewing downloaded items before use.