[{"data":1,"prerenderedAt":75},["Reactive",2],{"blog-post-markdown-keyboard-shortcuts-productivity-complete-guide":3},{"slug":4,"title":5,"description":6,"excerpt":7,"date":8,"category":9,"author":10,"keywords":11,"readingMinutes":12,"html":13,"headings":14,"tools":49,"related":50},"markdown-keyboard-shortcuts-productivity-complete-guide","Markdown Keyboard Shortcuts for Productivity: Complete Guide for Efficient Writing and Editing","Master essential Markdown keyboard shortcuts to boost writing productivity. Learn platform-specific shortcuts, custom key bindings, and workflow optimization techniques for faster content creation and editing.","Mastering Markdown keyboard shortcuts transforms content creation workflows from tedious manual formatting into efficient, streamlined writing experiences that maximize productivity and minimize…","2025-11-29","Tutorial","Matthew Rathbone","markdown keyboard shortcuts, markdown productivity shortcuts, markdown editor shortcuts, writing productivity markdown, markdown hotkeys, fast markdown editing, keyboard shortcuts writing",21,"\u003Cp>Mastering Markdown keyboard shortcuts transforms content creation workflows from tedious manual formatting into efficient, streamlined writing experiences that maximize productivity and minimize interruptions. By implementing platform-specific shortcuts, custom key bindings, and systematic workflow optimizations, technical writers, documentation teams, and content creators can achieve significant speed improvements while maintaining consistent formatting standards and reducing repetitive strain injuries associated with excessive mouse usage.\u003C/p>\n\u003Ch2 id=\"why-master-markdown-keyboard-shortcuts\">Why Master Markdown Keyboard Shortcuts?\u003C/h2>\n\u003Cp>Efficient keyboard shortcuts provide essential benefits for content creation workflows:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Speed Enhancement\u003C/strong>: Reduce formatting time by 60-80% compared to mouse-driven workflows\u003C/li>\n\u003Cli>\u003Cstrong>Flow Preservation\u003C/strong>: Maintain writing momentum without interrupting creative processes\u003C/li>\n\u003Cli>\u003Cstrong>Consistency\u003C/strong>: Ensure uniform formatting through muscle memory and standardized shortcuts\u003C/li>\n\u003Cli>\u003Cstrong>Accessibility\u003C/strong>: Support users with mobility limitations or repetitive strain concerns\u003C/li>\n\u003Cli>\u003Cstrong>Cross-Platform Skills\u003C/strong>: Transfer productivity techniques across different editors and platforms\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"foundation-keyboard-shortcut-principles\">Foundation Keyboard Shortcut Principles\u003C/h2>\n\u003Ch3 id=\"universal-markdown-shortcuts\">Universal Markdown Shortcuts\u003C/h3>\n\u003Cp>Understanding fundamental keyboard combinations that work across most Markdown editors:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Essential Universal Shortcuts\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Text Formatting Shortcuts\u003C/span>\n\u003Cspan class=\"hljs-strong\">**Bold Text**\u003C/span>: Ctrl+B (Windows/Linux) / Cmd+B (Mac)\n\u003Cspan class=\"hljs-emphasis\">*Italic Text*\u003C/span>: Ctrl+I (Windows/Linux) / Cmd+I (Mac)\n\u003Cspan class=\"hljs-code\">`Inline Code`\u003C/span>: Ctrl+\u003Cspan class=\"hljs-code\">` (Windows/Linux) / Cmd+`\u003C/span> (Mac)\n~~Strikethrough~~: Ctrl+Shift+X (many editors)\n\n\u003Cspan class=\"hljs-section\">## Structure Shortcuts\u003C/span>\n\u003Cspan class=\"hljs-section\"># Heading 1: Ctrl+1 (Windows/Linux) / Cmd+1 (Mac)\u003C/span>\n\u003Cspan class=\"hljs-section\">## Heading 2: Ctrl+2 (Windows/Linux) / Cmd+2 (Mac)\u003C/span>\n\u003Cspan class=\"hljs-section\">### Heading 3: Ctrl+3 (Windows/Linux) / Cmd+3 (Mac)\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## List Creation\u003C/span>\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> Unordered List: Ctrl+Shift+8 (Windows/Linux) / Cmd+Shift+8 (Mac)\n\u003Cspan class=\"hljs-bullet\">1.\u003C/span> Ordered List: Ctrl+Shift+7 (Windows/Linux) / Cmd+Shift+7 (Mac)\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> [ ] Task List: Ctrl+Shift+9 (Windows/Linux) / Cmd+Shift+9 (Mac)\n\n\u003Cspan class=\"hljs-section\">## Link and Image Shortcuts\u003C/span>\n[\u003Cspan class=\"hljs-symbol\">Link\u003C/span>]: \u003Cspan class=\"hljs-link\">Ctrl+K (Windows/Linux) / Cmd+K (Mac)\u003C/span>\n![Image]: Ctrl+Shift+I (Windows/Linux) / Cmd+Shift+I (Mac)\n\n\u003Cspan class=\"hljs-section\">## Code Block Shortcuts\u003C/span>\n\u003C/code>\u003C/pre>\u003Cp>Code Block: Ctrl+Shift+\u003Ccode> (Windows/Linux) / Cmd+Shift+\u003C/code> (Mac)\u003C/p>\n\u003Cpre>\u003Ccode>\n&gt; Quote Block: Ctrl+Shift+. (Windows/Linux) / Cmd+Shift+. (Mac)\n\n## Navigation and Selection\nSelect All: Ctrl+A (Windows/Linux) / Cmd+A (Mac)\nFind and Replace: Ctrl+H (Windows/Linux) / Cmd+Option+F (Mac)\nGo to Line: Ctrl+G (Windows/Linux) / Cmd+L (Mac)\n\u003C/code>\u003C/pre>\u003Ch3 id=\"advanced-multi-key-combinations\">Advanced Multi-Key Combinations\u003C/h3>\n\u003Cp>Creating sophisticated shortcuts for complex formatting patterns:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// advanced-shortcuts-config.js - Custom shortcut configurations\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownShortcutManager\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">shortcuts\u003C/span> = {\n            \u003Cspan class=\"hljs-comment\">// Multi-step formatting\u003C/span>\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+C&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">createCodeBlock\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+T&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">createTable\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+D&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">insertCurrentDate\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+L&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">createChecklistTemplate\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \n            \u003Cspan class=\"hljs-comment\">// Advanced text manipulation\u003C/span>\n            \u003Cspan class=\"hljs-string\">&#x27;Alt+Up&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">moveLineUp\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;Alt+Down&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">moveLineDown\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+Up&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">duplicateLineUp\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+Down&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">duplicateLineDown\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \n            \u003Cspan class=\"hljs-comment\">// Smart formatting\u003C/span>\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+F&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">formatSelectedText\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Alt+L&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">createLinkFromClipboard\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Alt+I&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">insertImageFromClipboard\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \n            \u003Cspan class=\"hljs-comment\">// Document structure\u003C/span>\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+H&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">generateTableOfContents\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+S&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">insertSeparator\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Alt+P&#x27;\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">previewToggle\u003C/span>.\u003Cspan class=\"hljs-title function_\">bind\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>)\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templates\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">codeBlock\u003C/span>: {\n                \u003Cspan class=\"hljs-attr\">prefix\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">suffix\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;```&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">placeholder\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;language\\n// Your code here\\n&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">cursorPosition\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;afterPrefix&#x27;\u003C/span>\n            },\n            \u003Cspan class=\"hljs-attr\">table\u003C/span>: {\n                \u003Cspan class=\"hljs-attr\">template\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;| Column 1 | Column 2 | Column 3 |\\n|----------|----------|----------|\\n| Data 1   | Data 2   | Data 3   |\\n&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">cursorPosition\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;firstCell&#x27;\u003C/span>\n            },\n            \u003Cspan class=\"hljs-attr\">checklist\u003C/span>: {\n                \u003Cspan class=\"hljs-attr\">template\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;- [ ] Task item 1\\n- [ ] Task item 2\\n- [ ] Task item 3\\n&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">cursorPosition\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;firstItem&#x27;\u003C/span>\n            }\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createCodeBlock\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> selection = editor.\u003Cspan class=\"hljs-title function_\">getSelection\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> template = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templates\u003C/span>.\u003Cspan class=\"hljs-property\">codeBlock\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (selection.\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span>) {\n            \u003Cspan class=\"hljs-comment\">// Wrap selected text in code block\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> wrappedText = \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${template.prefix}\u003C/span>\\n\u003Cspan class=\"hljs-subst\">${selection}\u003C/span>\\n\u003Cspan class=\"hljs-subst\">${template.suffix}\u003C/span>`\u003C/span>;\n            editor.\u003Cspan class=\"hljs-title function_\">replaceSelection\u003C/span>(wrappedText);\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            \u003Cspan class=\"hljs-comment\">// Insert template code block\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> fullTemplate = \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${template.prefix}\u003C/span>\u003Cspan class=\"hljs-subst\">${template.placeholder}\u003C/span>\u003Cspan class=\"hljs-subst\">${template.suffix}\u003C/span>`\u003C/span>;\n            editor.\u003Cspan class=\"hljs-title function_\">insertText\u003C/span>(fullTemplate);\n            \n            \u003Cspan class=\"hljs-comment\">// Position cursor after prefix for language input\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> prefixLength = template.\u003Cspan class=\"hljs-property\">prefix\u003C/span>.\u003Cspan class=\"hljs-property\">length\u003C/span>;\n            editor.\u003Cspan class=\"hljs-title function_\">setCursor\u003C/span>(editor.\u003Cspan class=\"hljs-title function_\">getCursor\u003C/span>().\u003Cspan class=\"hljs-property\">line\u003C/span>, prefixLength);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createTable\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> template = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templates\u003C/span>.\u003Cspan class=\"hljs-property\">table\u003C/span>.\u003Cspan class=\"hljs-property\">template\u003C/span>;\n        editor.\u003Cspan class=\"hljs-title function_\">insertText\u003C/span>(template);\n        \n        \u003Cspan class=\"hljs-comment\">// Move cursor to first cell for immediate editing\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> currentLine = editor.\u003Cspan class=\"hljs-title function_\">getCursor\u003C/span>().\u003Cspan class=\"hljs-property\">line\u003C/span>;\n        editor.\u003Cspan class=\"hljs-title function_\">setCursor\u003C/span>(currentLine - \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-number\">2\u003C/span>); \u003Cspan class=\"hljs-comment\">// Position in first cell\u003C/span>\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">insertCurrentDate\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> now = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> dateString = now.\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>().\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;T&#x27;\u003C/span>)[\u003Cspan class=\"hljs-number\">0\u003C/span>]; \u003Cspan class=\"hljs-comment\">// YYYY-MM-DD format\u003C/span>\n        editor.\u003Cspan class=\"hljs-title function_\">insertText\u003C/span>(dateString);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createChecklistTemplate\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> template = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templates\u003C/span>.\u003Cspan class=\"hljs-property\">checklist\u003C/span>.\u003Cspan class=\"hljs-property\">template\u003C/span>;\n        editor.\u003Cspan class=\"hljs-title function_\">insertText\u003C/span>(template);\n        \n        \u003Cspan class=\"hljs-comment\">// Position cursor at first task item\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> currentLine = editor.\u003Cspan class=\"hljs-title function_\">getCursor\u003C/span>().\u003Cspan class=\"hljs-property\">line\u003C/span>;\n        editor.\u003Cspan class=\"hljs-title function_\">setCursor\u003C/span>(currentLine - \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-number\">6\u003C/span>); \u003Cspan class=\"hljs-comment\">// After &quot;- [ ] &quot;\u003C/span>\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">moveLineUp\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> cursor = editor.\u003Cspan class=\"hljs-title function_\">getCursor\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> currentLine = cursor.\u003Cspan class=\"hljs-property\">line\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (currentLine &gt; \u003Cspan class=\"hljs-number\">0\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> lineContent = editor.\u003Cspan class=\"hljs-title function_\">getLine\u003C/span>(currentLine);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> previousLine = editor.\u003Cspan class=\"hljs-title function_\">getLine\u003C/span>(currentLine - \u003Cspan class=\"hljs-number\">1\u003C/span>);\n            \n            editor.\u003Cspan class=\"hljs-title function_\">setLine\u003C/span>(currentLine - \u003Cspan class=\"hljs-number\">1\u003C/span>, lineContent);\n            editor.\u003Cspan class=\"hljs-title function_\">setLine\u003C/span>(currentLine, previousLine);\n            editor.\u003Cspan class=\"hljs-title function_\">setCursor\u003C/span>(currentLine - \u003Cspan class=\"hljs-number\">1\u003C/span>, cursor.\u003Cspan class=\"hljs-property\">ch\u003C/span>);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">moveLineDown\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> cursor = editor.\u003Cspan class=\"hljs-title function_\">getCursor\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> currentLine = cursor.\u003Cspan class=\"hljs-property\">line\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> totalLines = editor.\u003Cspan class=\"hljs-title function_\">lineCount\u003C/span>();\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (currentLine &lt; totalLines - \u003Cspan class=\"hljs-number\">1\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> lineContent = editor.\u003Cspan class=\"hljs-title function_\">getLine\u003C/span>(currentLine);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> nextLine = editor.\u003Cspan class=\"hljs-title function_\">getLine\u003C/span>(currentLine + \u003Cspan class=\"hljs-number\">1\u003C/span>);\n            \n            editor.\u003Cspan class=\"hljs-title function_\">setLine\u003C/span>(currentLine + \u003Cspan class=\"hljs-number\">1\u003C/span>, lineContent);\n            editor.\u003Cspan class=\"hljs-title function_\">setLine\u003C/span>(currentLine, nextLine);\n            editor.\u003Cspan class=\"hljs-title function_\">setCursor\u003C/span>(currentLine + \u003Cspan class=\"hljs-number\">1\u003C/span>, cursor.\u003Cspan class=\"hljs-property\">ch\u003C/span>);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">formatSelectedText\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> selection = editor.\u003Cspan class=\"hljs-title function_\">getSelection\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!selection) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Smart formatting based on content\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> formattedText = selection;\n        \n        \u003Cspan class=\"hljs-comment\">// Auto-detect and format URLs\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> urlPattern = \u003Cspan class=\"hljs-regexp\">/https?:\\/\\/[^\\s]+/g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (urlPattern.\u003Cspan class=\"hljs-title function_\">test\u003C/span>(selection)) {\n            formattedText = \u003Cspan class=\"hljs-string\">`[\u003Cspan class=\"hljs-subst\">${selection}\u003C/span>](\u003Cspan class=\"hljs-subst\">${selection}\u003C/span>)`\u003C/span>;\n        }\n        \u003Cspan class=\"hljs-comment\">// Auto-detect code patterns (contains symbols/camelCase)\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-regexp\">/[{}()\\[\\]._]/\u003C/span>.\u003Cspan class=\"hljs-title function_\">test\u003C/span>(selection) || \u003Cspan class=\"hljs-regexp\">/[a-z][A-Z]/\u003C/span>.\u003Cspan class=\"hljs-title function_\">test\u003C/span>(selection)) {\n            formattedText = \u003Cspan class=\"hljs-string\">`\\`\u003Cspan class=\"hljs-subst\">${selection}\u003C/span>\\``\u003C/span>;\n        }\n        \u003Cspan class=\"hljs-comment\">// Auto-detect file paths\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-regexp\">/[\\/\\\\]/\u003C/span>.\u003Cspan class=\"hljs-title function_\">test\u003C/span>(selection)) {\n            formattedText = \u003Cspan class=\"hljs-string\">`\\`\u003Cspan class=\"hljs-subst\">${selection}\u003C/span>\\``\u003C/span>;\n        }\n        \u003Cspan class=\"hljs-comment\">// Default to emphasis for regular text\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            formattedText = \u003Cspan class=\"hljs-string\">`**\u003Cspan class=\"hljs-subst\">${selection}\u003C/span>**`\u003C/span>;\n        }\n        \n        editor.\u003Cspan class=\"hljs-title function_\">replaceSelection\u003C/span>(formattedText);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createLinkFromClipboard\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        navigator.\u003Cspan class=\"hljs-property\">clipboard\u003C/span>.\u003Cspan class=\"hljs-title function_\">readText\u003C/span>().\u003Cspan class=\"hljs-title function_\">then\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">clipboardText\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">isValidURL\u003C/span>(clipboardText)) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> linkText = \u003Cspan class=\"hljs-title function_\">prompt\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Enter link text:&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (linkText) {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> markdownLink = \u003Cspan class=\"hljs-string\">`[\u003Cspan class=\"hljs-subst\">${linkText}\u003C/span>](\u003Cspan class=\"hljs-subst\">${clipboardText}\u003C/span>)`\u003C/span>;\n                    editor.\u003Cspan class=\"hljs-title function_\">insertText\u003C/span>(markdownLink);\n                }\n            } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                \u003Cspan class=\"hljs-title function_\">alert\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Clipboard does not contain a valid URL&#x27;\u003C/span>);\n            }\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">isValidURL\u003C/span>(\u003Cspan class=\"hljs-params\">string\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title function_\">URL\u003C/span>(string);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (_) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateTableOfContents\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = editor.\u003Cspan class=\"hljs-title function_\">getValue\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> headings = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">extractHeadings\u003C/span>(content);\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> tocLines = [\u003Cspan class=\"hljs-string\">&#x27;## Table of Contents\\n&#x27;\u003C/span>];\n        headings.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">heading\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> indent = \u003Cspan class=\"hljs-string\">&#x27;  &#x27;\u003C/span>.\u003Cspan class=\"hljs-title function_\">repeat\u003C/span>(heading.\u003Cspan class=\"hljs-property\">level\u003C/span> - \u003Cspan class=\"hljs-number\">1\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> link = heading.\u003Cspan class=\"hljs-property\">text\u003C/span>.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>()\n                .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/[^\\w\\s-]/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>)\n                .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/\\s+/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span>);\n            tocLines.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(\u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${indent}\u003C/span>- [\u003Cspan class=\"hljs-subst\">${heading.text}\u003C/span>](#\u003Cspan class=\"hljs-subst\">${link}\u003C/span>)`\u003C/span>);\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> toc = tocLines.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>) + \u003Cspan class=\"hljs-string\">&#x27;\\n\\n&#x27;\u003C/span>;\n        editor.\u003Cspan class=\"hljs-title function_\">insertText\u003C/span>(toc);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">extractHeadings\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> headingRegex = \u003Cspan class=\"hljs-regexp\">/^(#{1,6})\\s+(.+)$/gm\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> headings = [];\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> match;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> ((match = headingRegex.\u003Cspan class=\"hljs-title function_\">exec\u003C/span>(content)) !== \u003Cspan class=\"hljs-literal\">null\u003C/span>) {\n            headings.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                \u003Cspan class=\"hljs-attr\">level\u003C/span>: match[\u003Cspan class=\"hljs-number\">1\u003C/span>].\u003Cspan class=\"hljs-property\">length\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">text\u003C/span>: match[\u003Cspan class=\"hljs-number\">2\u003C/span>].\u003Cspan class=\"hljs-title function_\">trim\u003C/span>()\n            });\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> headings;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">insertSeparator\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> separator = \u003Cspan class=\"hljs-string\">&#x27;\\n---\\n\\n&#x27;\u003C/span>;\n        editor.\u003Cspan class=\"hljs-title function_\">insertText\u003C/span>(separator);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">previewToggle\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Implementation depends on editor API\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-keyword\">typeof\u003C/span> editor.\u003Cspan class=\"hljs-property\">togglePreview\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;function&#x27;\u003C/span>) {\n            editor.\u003Cspan class=\"hljs-title function_\">togglePreview\u003C/span>();\n        }\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// Usage example for custom editor integration\u003C/span>\n\u003Cspan class=\"hljs-keyword\">function\u003C/span> \u003Cspan class=\"hljs-title function_\">initializeShortcuts\u003C/span>(\u003Cspan class=\"hljs-params\">editor\u003C/span>) {\n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> shortcutManager = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownShortcutManager\u003C/span>();\n    \n    \u003Cspan class=\"hljs-comment\">// Register all shortcuts with the editor\u003C/span>\n    \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(shortcutManager.\u003Cspan class=\"hljs-property\">shortcuts\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[shortcut, handler]\u003C/span>) =&gt;\u003C/span> {\n        editor.\u003Cspan class=\"hljs-title function_\">addKeyBinding\u003C/span>(shortcut, handler);\n    });\n    \n    \u003Cspan class=\"hljs-comment\">// Add context-aware shortcuts\u003C/span>\n    editor.\u003Cspan class=\"hljs-title function_\">onSelectionChange\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">selection\u003C/span>) =&gt;\u003C/span> {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (selection.\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span>) {\n            \u003Cspan class=\"hljs-comment\">// Enable selection-specific shortcuts\u003C/span>\n            editor.\u003Cspan class=\"hljs-title function_\">enableShortcut\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+F&#x27;\u003C/span>); \u003Cspan class=\"hljs-comment\">// Format selection\u003C/span>\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            editor.\u003Cspan class=\"hljs-title function_\">disableShortcut\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+F&#x27;\u003C/span>);\n        }\n    });\n}\n\u003C/code>\u003C/pre>\u003Ch2 id=\"platform-specific-optimization-strategies\">Platform-Specific Optimization Strategies\u003C/h2>\n\u003Ch3 id=\"vs-code-markdown-shortcuts\">VS Code Markdown Shortcuts\u003C/h3>\n\u003Cp>Maximizing productivity in Visual Studio Code&#39;s Markdown environment:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-json\">\u003Cspan class=\"hljs-comment\">// vscode-markdown-shortcuts.json - Custom VS Code keybindings\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+v&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.showPreviewToSide&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+k v&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.showPreview&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+h&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.toc.create&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+t&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.editing.toggleTable&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+c&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.editing.toggleCodeBlock&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;alt+c&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.editing.toggleCodeSpan&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown &amp;&amp; editorHasSelection&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+i&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.editing.paste&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+l&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.editing.toggleList&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+alt+x&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.editing.toggleTaskList&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+f&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.format.toggleBold&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown &amp;&amp; editorHasSelection&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;ctrl+shift+e&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.format.toggleItalic&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown &amp;&amp; editorHasSelection&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">{\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;key&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;f2&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;command&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;markdown.extension.editing.toggleHeadingLevel&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">,\u003C/span>\n    \u003Cspan class=\"hljs-attr\">&quot;when&quot;\u003C/span>\u003Cspan class=\"hljs-punctuation\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;editorLangId == markdown&quot;\u003C/span>\n\u003Cspan class=\"hljs-punctuation\">}\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"obsidian-markdown-shortcuts\">Obsidian Markdown Shortcuts\u003C/h3>\n\u003Cp>Leveraging Obsidian&#39;s powerful shortcut system for note-taking workflows:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// obsidian-custom-shortcuts.js - Obsidian plugin shortcuts\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">ObsidianMarkdownShortcuts\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">app\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">app\u003C/span> = app;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">shortcuts\u003C/span> = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">defineShortcuts\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">defineShortcuts\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> [\n            {\n                \u003Cspan class=\"hljs-attr\">id\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;insert-current-time&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Insert Current Time&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">hotkeys\u003C/span>: [{ \u003Cspan class=\"hljs-attr\">modifiers\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;Ctrl&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Shift&#x27;\u003C/span>], \u003Cspan class=\"hljs-attr\">key\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;T&#x27;\u003C/span> }],\n                \u003Cspan class=\"hljs-attr\">callback\u003C/span>: \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">insertCurrentTime\u003C/span>()\n            },\n            {\n                \u003Cspan class=\"hljs-attr\">id\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;create-daily-note-link&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Create Daily Note Link&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">hotkeys\u003C/span>: [{ \u003Cspan class=\"hljs-attr\">modifiers\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;Ctrl&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Shift&#x27;\u003C/span>], \u003Cspan class=\"hljs-attr\">key\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;D&#x27;\u003C/span> }],\n                \u003Cspan class=\"hljs-attr\">callback\u003C/span>: \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createDailyNoteLink\u003C/span>()\n            },\n            {\n                \u003Cspan class=\"hljs-attr\">id\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;wrap-with-callout&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Wrap Selection with Callout&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">hotkeys\u003C/span>: [{ \u003Cspan class=\"hljs-attr\">modifiers\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;Ctrl&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Alt&#x27;\u003C/span>], \u003Cspan class=\"hljs-attr\">key\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;C&#x27;\u003C/span> }],\n                \u003Cspan class=\"hljs-attr\">callback\u003C/span>: \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">wrapWithCallout\u003C/span>()\n            },\n            {\n                \u003Cspan class=\"hljs-attr\">id\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;create-mermaid-diagram&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Insert Mermaid Diagram Template&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">hotkeys\u003C/span>: [{ \u003Cspan class=\"hljs-attr\">modifiers\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;Ctrl&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Shift&#x27;\u003C/span>], \u003Cspan class=\"hljs-attr\">key\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;M&#x27;\u003C/span> }],\n                \u003Cspan class=\"hljs-attr\">callback\u003C/span>: \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createMermaidDiagram\u003C/span>()\n            },\n            {\n                \u003Cspan class=\"hljs-attr\">id\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;insert-markdown-table&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Insert Markdown Table&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">hotkeys\u003C/span>: [{ \u003Cspan class=\"hljs-attr\">modifiers\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;Ctrl&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Shift&#x27;\u003C/span>], \u003Cspan class=\"hljs-attr\">key\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;A&#x27;\u003C/span> }],\n                \u003Cspan class=\"hljs-attr\">callback\u003C/span>: \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">insertTable\u003C/span>()\n            },\n            {\n                \u003Cspan class=\"hljs-attr\">id\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;toggle-reading-mode&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Toggle Reading Mode&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">hotkeys\u003C/span>: [{ \u003Cspan class=\"hljs-attr\">modifiers\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;Ctrl&#x27;\u003C/span>], \u003Cspan class=\"hljs-attr\">key\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;E&#x27;\u003C/span> }],\n                \u003Cspan class=\"hljs-attr\">callback\u003C/span>: \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">toggleReadingMode\u003C/span>()\n            },\n            {\n                \u003Cspan class=\"hljs-attr\">id\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;create-wikilink-from-selection&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Create Wikilink from Selection&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">hotkeys\u003C/span>: [{ \u003Cspan class=\"hljs-attr\">modifiers\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;Ctrl&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Shift&#x27;\u003C/span>], \u003Cspan class=\"hljs-attr\">key\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;L&#x27;\u003C/span> }],\n                \u003Cspan class=\"hljs-attr\">callback\u003C/span>: \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createWikilinkFromSelection\u003C/span>()\n            }\n        ];\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">insertCurrentTime\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> editor = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">app\u003C/span>.\u003Cspan class=\"hljs-property\">workspace\u003C/span>.\u003Cspan class=\"hljs-property\">activeLeaf\u003C/span>?.\u003Cspan class=\"hljs-property\">view\u003C/span>?.\u003Cspan class=\"hljs-property\">editor\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!editor) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> now = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> timeString = now.\u003Cspan class=\"hljs-title function_\">toLocaleTimeString\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;en-US&#x27;\u003C/span>, { \n            \u003Cspan class=\"hljs-attr\">hour12\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span>, \n            \u003Cspan class=\"hljs-attr\">hour\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;2-digit&#x27;\u003C/span>, \n            \u003Cspan class=\"hljs-attr\">minute\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;2-digit&#x27;\u003C/span> \n        });\n        \n        editor.\u003Cspan class=\"hljs-title function_\">replaceSelection\u003C/span>(timeString);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createDailyNoteLink\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> editor = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">app\u003C/span>.\u003Cspan class=\"hljs-property\">workspace\u003C/span>.\u003Cspan class=\"hljs-property\">activeLeaf\u003C/span>?.\u003Cspan class=\"hljs-property\">view\u003C/span>?.\u003Cspan class=\"hljs-property\">editor\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!editor) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> today = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> dateString = today.\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>().\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;T&#x27;\u003C/span>)[\u003Cspan class=\"hljs-number\">0\u003C/span>];\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> dailyNoteLink = \u003Cspan class=\"hljs-string\">`[[\u003Cspan class=\"hljs-subst\">${dateString}\u003C/span>]]`\u003C/span>;\n        \n        editor.\u003Cspan class=\"hljs-title function_\">replaceSelection\u003C/span>(dailyNoteLink);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">wrapWithCallout\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> editor = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">app\u003C/span>.\u003Cspan class=\"hljs-property\">workspace\u003C/span>.\u003Cspan class=\"hljs-property\">activeLeaf\u003C/span>?.\u003Cspan class=\"hljs-property\">view\u003C/span>?.\u003Cspan class=\"hljs-property\">editor\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!editor) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> selection = editor.\u003Cspan class=\"hljs-title function_\">getSelection\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!selection) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> calloutTypes = [\u003Cspan class=\"hljs-string\">&#x27;note&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;tip&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;warning&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;danger&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;info&#x27;\u003C/span>];\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> calloutType = \u003Cspan class=\"hljs-title function_\">prompt\u003C/span>(\u003Cspan class=\"hljs-string\">`Choose callout type (\u003Cspan class=\"hljs-subst\">${calloutTypes.join(\u003Cspan class=\"hljs-string\">&#x27;, &#x27;\u003C/span>)}\u003C/span>):`\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;note&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (calloutTypes.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(calloutType.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>())) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> callout = \u003Cspan class=\"hljs-string\">`&gt; [!\u003Cspan class=\"hljs-subst\">${calloutType}\u003C/span>]\\n&gt; \u003Cspan class=\"hljs-subst\">${selection.replace(/\\n/g, \u003Cspan class=\"hljs-string\">&#x27;\\n&gt; &#x27;\u003C/span>)}\u003C/span>`\u003C/span>;\n            editor.\u003Cspan class=\"hljs-title function_\">replaceSelection\u003C/span>(callout);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createMermaidDiagram\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> editor = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">app\u003C/span>.\u003Cspan class=\"hljs-property\">workspace\u003C/span>.\u003Cspan class=\"hljs-property\">activeLeaf\u003C/span>?.\u003Cspan class=\"hljs-property\">view\u003C/span>?.\u003Cspan class=\"hljs-property\">editor\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!editor) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> template = \u003Cspan class=\"hljs-string\">`\\`\\`\\`mermaid\ngraph TD\n    A[Start] --&gt; B{Decision}\n    B --&gt;|Yes| C[Action 1]\n    B --&gt;|No| D[Action 2]\n    C --&gt; E[End]\n    D --&gt; E\n\\`\\`\\``\u003C/span>;\n        \n        editor.\u003Cspan class=\"hljs-title function_\">replaceSelection\u003C/span>(template);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">insertTable\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> editor = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">app\u003C/span>.\u003Cspan class=\"hljs-property\">workspace\u003C/span>.\u003Cspan class=\"hljs-property\">activeLeaf\u003C/span>?.\u003Cspan class=\"hljs-property\">view\u003C/span>?.\u003Cspan class=\"hljs-property\">editor\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!editor) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> rows = \u003Cspan class=\"hljs-built_in\">parseInt\u003C/span>(\u003Cspan class=\"hljs-title function_\">prompt\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Number of rows:&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;3&#x27;\u003C/span>));\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> cols = \u003Cspan class=\"hljs-built_in\">parseInt\u003C/span>(\u003Cspan class=\"hljs-title function_\">prompt\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Number of columns:&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;3&#x27;\u003C/span>));\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-built_in\">isNaN\u003C/span>(rows) || \u003Cspan class=\"hljs-built_in\">isNaN\u003C/span>(cols) || rows &lt; \u003Cspan class=\"hljs-number\">1\u003C/span> || cols &lt; \u003Cspan class=\"hljs-number\">1\u003C/span>) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> table = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Header row\u003C/span>\n        table += \u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span> + \u003Cspan class=\"hljs-string\">&#x27; Header &#x27;\u003C/span>.\u003Cspan class=\"hljs-title function_\">repeat\u003C/span>(cols).\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-title class_\">Boolean\u003C/span>).\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">h\u003C/span> =&gt;\u003C/span> \u003Cspan class=\"hljs-string\">` \u003Cspan class=\"hljs-subst\">${h}\u003C/span> |`\u003C/span>).\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>) + \u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Separator row\u003C/span>\n        table += \u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span> + \u003Cspan class=\"hljs-string\">&#x27;--------|&#x27;\u003C/span>.\u003Cspan class=\"hljs-title function_\">repeat\u003C/span>(cols) + \u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Data rows\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">let\u003C/span> i = \u003Cspan class=\"hljs-number\">0\u003C/span>; i &lt; rows; i++) {\n            table += \u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span> + \u003Cspan class=\"hljs-string\">&#x27; Data |&#x27;\u003C/span>.\u003Cspan class=\"hljs-title function_\">repeat\u003C/span>(cols) + \u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>;\n        }\n        \n        editor.\u003Cspan class=\"hljs-title function_\">replaceSelection\u003C/span>(table);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">toggleReadingMode\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> activeLeaf = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">app\u003C/span>.\u003Cspan class=\"hljs-property\">workspace\u003C/span>.\u003Cspan class=\"hljs-property\">activeLeaf\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!activeLeaf) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> viewState = activeLeaf.\u003Cspan class=\"hljs-title function_\">getViewState\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (viewState.\u003Cspan class=\"hljs-property\">type\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;markdown&#x27;\u003C/span>) {\n            viewState.\u003Cspan class=\"hljs-property\">state\u003C/span>.\u003Cspan class=\"hljs-property\">mode\u003C/span> = viewState.\u003Cspan class=\"hljs-property\">state\u003C/span>.\u003Cspan class=\"hljs-property\">mode\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;source&#x27;\u003C/span> ? \u003Cspan class=\"hljs-string\">&#x27;preview&#x27;\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;source&#x27;\u003C/span>;\n            activeLeaf.\u003Cspan class=\"hljs-title function_\">setViewState\u003C/span>(viewState);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createWikilinkFromSelection\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> editor = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">app\u003C/span>.\u003Cspan class=\"hljs-property\">workspace\u003C/span>.\u003Cspan class=\"hljs-property\">activeLeaf\u003C/span>?.\u003Cspan class=\"hljs-property\">view\u003C/span>?.\u003Cspan class=\"hljs-property\">editor\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!editor) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> selection = editor.\u003Cspan class=\"hljs-title function_\">getSelection\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!selection) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> wikilink = \u003Cspan class=\"hljs-string\">`[[\u003Cspan class=\"hljs-subst\">${selection}\u003C/span>]]`\u003C/span>;\n        editor.\u003Cspan class=\"hljs-title function_\">replaceSelection\u003C/span>(wikilink);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">registerAllShortcuts\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">shortcuts\u003C/span>.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">shortcut\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">app\u003C/span>.\u003Cspan class=\"hljs-property\">scope\u003C/span>.\u003Cspan class=\"hljs-title function_\">register\u003C/span>(\n                shortcut.\u003Cspan class=\"hljs-property\">hotkeys\u003C/span>[\u003Cspan class=\"hljs-number\">0\u003C/span>].\u003Cspan class=\"hljs-property\">modifiers\u003C/span>,\n                shortcut.\u003Cspan class=\"hljs-property\">hotkeys\u003C/span>[\u003Cspan class=\"hljs-number\">0\u003C/span>].\u003Cspan class=\"hljs-property\">key\u003C/span>,\n                shortcut.\u003Cspan class=\"hljs-property\">callback\u003C/span>\n            );\n        });\n    }\n}\n\u003C/code>\u003C/pre>\u003Ch3 id=\"notion-markdown-shortcuts\">Notion Markdown Shortcuts\u003C/h3>\n\u003Cp>Optimizing keyboard workflows in Notion&#39;s Markdown-inspired interface:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Notion Markdown Shortcuts Reference\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Text Formatting\u003C/span>\n\u003Cspan class=\"hljs-strong\">**Bold**\u003C/span>: Cmd/Ctrl + B\n\u003Cspan class=\"hljs-emphasis\">*Italic*\u003C/span>: Cmd/Ctrl + I\n\u003Cspan class=\"hljs-code\">`Code`\u003C/span>: Cmd/Ctrl + E\n~~Strikethrough~~: Cmd/Ctrl + Shift + S\n\n\u003Cspan class=\"hljs-section\">## Blocks and Structure\u003C/span>\n/heading1: Create H1 heading\n/heading2: Create H2 heading  \n/heading3: Create H3 heading\n/bullet: Create bullet list\n/number: Create numbered list\n/todo: Create to-do list\n/toggle: Create toggle block\n/quote: Create quote block\n/divider: Create divider\n/code: Create code block\n/callout: Create callout box\n\n\u003Cspan class=\"hljs-section\">## Quick Actions\u003C/span>\nCmd/Ctrl + ]: Indent block\nCmd/Ctrl + [: Outdent block  \nCmd/Ctrl + Shift + M: Create comment\nCmd/Ctrl + Enter: Create new block\nCmd/Ctrl + D: Duplicate block\nCmd/Ctrl + Shift + Backspace: Delete current block\n\n\u003Cspan class=\"hljs-section\">## Advanced Shortcuts\u003C/span>\nCmd/Ctrl + Shift + L: Create link\nCmd/Ctrl + Shift + N: Create new page\nCmd/Ctrl + P: Quick find/search\nCmd/Ctrl + Z: Undo\nCmd/Ctrl + Shift + Z: Redo\nEscape: Clear selection/exit edit mode\n\n\u003Cspan class=\"hljs-section\">## Database Shortcuts (when in database view)\u003C/span>\nCmd/Ctrl + Shift + Enter: Add new row\nTab: Move to next cell\nShift + Tab: Move to previous cell\nEnter: Edit current cell\nEscape: Stop editing cell\n\n\u003Cspan class=\"hljs-section\">## Page Navigation\u003C/span>\nCmd/Ctrl + Shift + P: Search pages\nCmd/Ctrl + [: Go back\nCmd/Ctrl + ]: Go forward\nCmd/Ctrl + Shift + L: Copy link to current page\n\u003C/code>\u003C/pre>\u003Ch2 id=\"workflow-optimization-techniques\">Workflow Optimization Techniques\u003C/h2>\n\u003Ch3 id=\"snippet-based-productivity\">Snippet-Based Productivity\u003C/h3>\n\u003Cp>Creating reusable text snippets for common Markdown patterns:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-comment\"># markdown-snippets.yml - Text expansion snippets\u003C/span>\n\u003Cspan class=\"hljs-attr\">snippets:\u003C/span>\n  \u003Cspan class=\"hljs-comment\"># Document structure snippets\u003C/span>\n  \u003Cspan class=\"hljs-attr\">frontmatter:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!fm&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      ---\n      title: &quot;${1:Document Title}&quot;\n      date: ${2:$(date +%Y-%m-%d)}\n      author: ${3:Author Name}\n      tags: [${4:tag1, tag2}]\n      ---\n\u003C/span>      \n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n  \n  \u003Cspan class=\"hljs-comment\"># Code block snippets\u003C/span>\n  \u003Cspan class=\"hljs-attr\">codeblock:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!cb&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      \\`\\`\\`${1:language}\n      ${2:// Your code here}\n      \\`\\`\\`\n\u003C/span>      \n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n  \n  \u003Cspan class=\"hljs-attr\">javascript:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!js&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      \\`\\`\\`javascript\n      ${1:// JavaScript code}\n      ${0}\n      \\`\\`\\`\n\u003C/span>  \n  \u003Cspan class=\"hljs-attr\">python:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!py&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      \\`\\`\\`python\n      ${1:# Python code}\n      ${0}\n      \\`\\`\\`\n\u003C/span>  \n  \u003Cspan class=\"hljs-comment\"># List snippets\u003C/span>\n  \u003Cspan class=\"hljs-attr\">checklist:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!cl&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      - [ ] ${1:Task item 1}\n      - [ ] ${2:Task item 2}\n      - [ ] ${3:Task item 3}\n      ${0}\n\u003C/span>  \n  \u003Cspan class=\"hljs-attr\">pros_cons:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!pc&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      ## Pros\n      - ${1:Advantage 1}\n      - ${2:Advantage 2}\n\u003C/span>      \n      \u003Cspan class=\"hljs-comment\">## Cons\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">${3:Disadvantage\u003C/span> \u003Cspan class=\"hljs-number\">1\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">${4:Disadvantage\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n  \n  \u003Cspan class=\"hljs-comment\"># Table snippets\u003C/span>\n  \u003Cspan class=\"hljs-attr\">table3x3:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!t3&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      | ${1:Header 1} | ${2:Header 2} | ${3:Header 3} |\n      |--------------|--------------|--------------|\n      | ${4:Cell 1}  | ${5:Cell 2}  | ${6:Cell 3}  |\n      | ${7:Cell 4}  | ${8:Cell 5}  | ${9:Cell 6}  |\n\u003C/span>      \n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n  \n  \u003Cspan class=\"hljs-attr\">comparison_table:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!comp&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      | Feature | Option A | Option B | Option C |\n      |---------|----------|----------|----------|\n      | ${1:Feature 1} | ${2:Value A1} | ${3:Value B1} | ${4:Value C1} |\n      | ${5:Feature 2} | ${6:Value A2} | ${7:Value B2} | ${8:Value C2} |\n\u003C/span>      \n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n  \n  \u003Cspan class=\"hljs-comment\"># Link snippets\u003C/span>\n  \u003Cspan class=\"hljs-attr\">reference_link:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!ref&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      [${1:Link Text}][${2:reference-id}]\n\u003C/span>      \n      [\u003Cspan class=\"hljs-string\">$\u003C/span>{\u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-string\">:reference-id\u003C/span>}]\u003Cspan class=\"hljs-string\">:\u003C/span> \u003Cspan class=\"hljs-string\">${3:https://example.com}\u003C/span> \u003Cspan class=\"hljs-string\">&quot;${4:Link Title}&quot;\u003C/span>\n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n  \n  \u003Cspan class=\"hljs-attr\">image_with_alt:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!img&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      ![${1:Alt text}](${2:image-url.jpg} &quot;${3:Image title}&quot;)\n\u003C/span>      \n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n  \n  \u003Cspan class=\"hljs-comment\"># Documentation snippets\u003C/span>\n  \u003Cspan class=\"hljs-attr\">function_doc:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!func&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      ## \\`${1:functionName}(${2:parameters})\\`\n\u003C/span>      \n      \u003Cspan class=\"hljs-string\">**Description**:\u003C/span> \u003Cspan class=\"hljs-string\">${3:Function\u003C/span> \u003Cspan class=\"hljs-string\">description}\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">**Parameters**:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">\\`${4:param1}\\`\u003C/span> \u003Cspan class=\"hljs-string\">(${5:type}):\u003C/span> \u003Cspan class=\"hljs-string\">${6:Parameter\u003C/span> \u003Cspan class=\"hljs-string\">description}\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">**Returns**:\u003C/span> \u003Cspan class=\"hljs-string\">${7:Return\u003C/span> \u003Cspan class=\"hljs-string\">type\u003C/span> \u003Cspan class=\"hljs-string\">and\u003C/span> \u003Cspan class=\"hljs-string\">description}\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">**Example**:\u003C/span>\n      \u003Cspan class=\"hljs-string\">\\`\\`\\`${8:language}\u003C/span>\n      \u003Cspan class=\"hljs-string\">${9://\u003C/span> \u003Cspan class=\"hljs-string\">Usage\u003C/span> \u003Cspan class=\"hljs-string\">example}\u003C/span>\n      \u003Cspan class=\"hljs-string\">\\`\\`\\`\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n  \n  \u003Cspan class=\"hljs-attr\">api_endpoint:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!api&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      ### ${1:HTTP_METHOD} \\`${2:/api/endpoint}\\`\n\u003C/span>      \n      \u003Cspan class=\"hljs-string\">**Description**:\u003C/span> \u003Cspan class=\"hljs-string\">${3:Endpoint\u003C/span> \u003Cspan class=\"hljs-string\">description}\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">**Parameters**:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">\\`${4:param}\\`\u003C/span> \u003Cspan class=\"hljs-string\">(${5:type}):\u003C/span> \u003Cspan class=\"hljs-string\">${6:Parameter\u003C/span> \u003Cspan class=\"hljs-string\">description}\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">**Response**:\u003C/span>\n      \u003Cspan class=\"hljs-string\">\\`\\`\\`json\u003C/span>\n      {\n        \u003Cspan class=\"hljs-string\">&quot;${7:field}&quot;\u003C/span>\u003Cspan class=\"hljs-string\">:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;${8:value}&quot;\u003C/span>\n      }\n      \u003Cspan class=\"hljs-string\">\\`\\`\\`\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">**Status\u003C/span> \u003Cspan class=\"hljs-string\">Codes**:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">\\`200\\`:\u003C/span> \u003Cspan class=\"hljs-string\">Success\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">\\`400\\`:\u003C/span> \u003Cspan class=\"hljs-string\">Bad\u003C/span> \u003Cspan class=\"hljs-string\">Request\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">\\`404\\`:\u003C/span> \u003Cspan class=\"hljs-string\">Not\u003C/span> \u003Cspan class=\"hljs-string\">Found\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n  \n  \u003Cspan class=\"hljs-comment\"># Meeting notes snippet\u003C/span>\n  \u003Cspan class=\"hljs-attr\">meeting_notes:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!meet&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      # ${1:Meeting Title}\n\u003C/span>      \n      \u003Cspan class=\"hljs-string\">**Date**:\u003C/span> \u003Cspan class=\"hljs-string\">${2:$(date\u003C/span> \u003Cspan class=\"hljs-string\">+%Y-%m-%d)}\u003C/span>\n      \u003Cspan class=\"hljs-string\">**Time**:\u003C/span> \u003Cspan class=\"hljs-string\">${3:$(date\u003C/span> \u003Cspan class=\"hljs-string\">+%H:%M)}\u003C/span>\n      \u003Cspan class=\"hljs-string\">**Attendees**:\u003C/span> \u003Cspan class=\"hljs-string\">${4:Name\u003C/span> \u003Cspan class=\"hljs-number\">1\u003C/span>\u003Cspan class=\"hljs-string\">,\u003C/span> \u003Cspan class=\"hljs-string\">Name\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \n      \u003Cspan class=\"hljs-comment\">## Agenda\u003C/span>\n      \u003Cspan class=\"hljs-number\">1\u003C/span>\u003Cspan class=\"hljs-string\">.\u003C/span> \u003Cspan class=\"hljs-string\">${5:Agenda\u003C/span> \u003Cspan class=\"hljs-string\">item\u003C/span> \u003Cspan class=\"hljs-number\">1\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-string\">.\u003C/span> \u003Cspan class=\"hljs-string\">${6:Agenda\u003C/span> \u003Cspan class=\"hljs-string\">item\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \n      \u003Cspan class=\"hljs-comment\">## Discussion\u003C/span>\n      \u003Cspan class=\"hljs-string\">${7:Discussion\u003C/span> \u003Cspan class=\"hljs-string\">notes}\u003C/span>\n      \n      \u003Cspan class=\"hljs-comment\">## Action Items\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> [ ] \u003Cspan class=\"hljs-string\">${8:Action\u003C/span> \u003Cspan class=\"hljs-string\">item\u003C/span> \u003Cspan class=\"hljs-number\">1\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span> \u003Cspan class=\"hljs-string\">(${9:Owner})\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> [ ] \u003Cspan class=\"hljs-string\">${10:Action\u003C/span> \u003Cspan class=\"hljs-string\">item\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span> \u003Cspan class=\"hljs-string\">(${11:Owner})\u003C/span>\n      \n      \u003Cspan class=\"hljs-comment\">## Next Steps\u003C/span>\n      \u003Cspan class=\"hljs-string\">${12:Next\u003C/span> \u003Cspan class=\"hljs-string\">meeting\u003C/span> \u003Cspan class=\"hljs-string\">date\u003C/span> \u003Cspan class=\"hljs-string\">and\u003C/span> \u003Cspan class=\"hljs-string\">preparation\u003C/span> \u003Cspan class=\"hljs-string\">items}\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n  \n  \u003Cspan class=\"hljs-comment\"># Review template\u003C/span>\n  \u003Cspan class=\"hljs-attr\">review_template:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">trigger:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;!review&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">content:\u003C/span> \u003Cspan class=\"hljs-string\">|\n      # ${1:Review Title}\n\u003C/span>      \n      \u003Cspan class=\"hljs-comment\">## Summary\u003C/span>\n      \u003Cspan class=\"hljs-string\">${2:Brief\u003C/span> \u003Cspan class=\"hljs-string\">overview}\u003C/span>\n      \n      \u003Cspan class=\"hljs-comment\">## Strengths\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">${3:Positive\u003C/span> \u003Cspan class=\"hljs-string\">aspect\u003C/span> \u003Cspan class=\"hljs-number\">1\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">${4:Positive\u003C/span> \u003Cspan class=\"hljs-string\">aspect\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \n      \u003Cspan class=\"hljs-comment\">## Areas for Improvement\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">${5:Improvement\u003C/span> \u003Cspan class=\"hljs-string\">area\u003C/span> \u003Cspan class=\"hljs-number\">1\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">${6:Improvement\u003C/span> \u003Cspan class=\"hljs-string\">area\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \n      \u003Cspan class=\"hljs-comment\">## Recommendations\u003C/span>\n      \u003Cspan class=\"hljs-number\">1\u003C/span>\u003Cspan class=\"hljs-string\">.\u003C/span> \u003Cspan class=\"hljs-string\">${7:Recommendation\u003C/span> \u003Cspan class=\"hljs-number\">1\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-string\">.\u003C/span> \u003Cspan class=\"hljs-string\">${8:Recommendation\u003C/span> \u003Cspan class=\"hljs-number\">2\u003C/span>\u003Cspan class=\"hljs-string\">}\u003C/span>\n      \n      \u003Cspan class=\"hljs-comment\">## Overall Rating\u003C/span>\n      \u003Cspan class=\"hljs-string\">${9:Rating\u003C/span> \u003Cspan class=\"hljs-string\">and\u003C/span> \u003Cspan class=\"hljs-string\">justification}\u003C/span>\n      \n      \u003Cspan class=\"hljs-string\">${0}\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"custom-macro-development\">Custom Macro Development\u003C/h3>\n\u003Cp>Building advanced keyboard macro systems for complex Markdown workflows:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-python\">\u003Cspan class=\"hljs-comment\"># markdown_macro_system.py - Advanced macro system for Markdown editing\u003C/span>\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> json\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> re\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> datetime \u003Cspan class=\"hljs-keyword\">import\u003C/span> datetime\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> typing \u003Cspan class=\"hljs-keyword\">import\u003C/span> \u003Cspan class=\"hljs-type\">Dict\u003C/span>, \u003Cspan class=\"hljs-type\">List\u003C/span>, \u003Cspan class=\"hljs-type\">Callable\u003C/span>\n\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownMacroSystem\u003C/span>:\n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">__init__\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        self.macros = {}\n        self.variables = {}\n        self.macro_history = []\n        self.register_default_macros()\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">register_macro\u003C/span>(\u003Cspan class=\"hljs-params\">self, name: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, shortcut: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, handler: \u003Cspan class=\"hljs-type\">Callable\u003C/span>\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Register a new macro with keyboard shortcut.&quot;&quot;&quot;\u003C/span>\n        self.macros[shortcut] = {\n            \u003Cspan class=\"hljs-string\">&#x27;name&#x27;\u003C/span>: name,\n            \u003Cspan class=\"hljs-string\">&#x27;handler&#x27;\u003C/span>: handler,\n            \u003Cspan class=\"hljs-string\">&#x27;usage_count&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;created_date&#x27;\u003C/span>: datetime.now()\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">register_default_macros\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Register commonly used macros.&quot;&quot;&quot;\u003C/span>\n        \n        \u003Cspan class=\"hljs-comment\"># Text transformation macros\u003C/span>\n        self.register_macro(\n            \u003Cspan class=\"hljs-string\">&#x27;Title Case Transform&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Alt+T&#x27;\u003C/span>,\n            self.transform_to_title_case\n        )\n        \n        self.register_macro(\n            \u003Cspan class=\"hljs-string\">&#x27;URL to Markdown Link&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Alt+L&#x27;\u003C/span>,\n            self.convert_url_to_link\n        )\n        \n        self.register_macro(\n            \u003Cspan class=\"hljs-string\">&#x27;Smart Table Generator&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Alt+G&#x27;\u003C/span>,\n            self.generate_smart_table\n        )\n        \n        self.register_macro(\n            \u003Cspan class=\"hljs-string\">&#x27;Document Outline Generator&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Alt+O&#x27;\u003C/span>,\n            self.generate_document_outline\n        )\n        \n        self.register_macro(\n            \u003Cspan class=\"hljs-string\">&#x27;Bibliography Entry&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Alt+B&#x27;\u003C/span>,\n            self.create_bibliography_entry\n        )\n        \n        self.register_macro(\n            \u003Cspan class=\"hljs-string\">&#x27;Code Documentation Block&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Alt+D&#x27;\u003C/span>,\n            self.create_code_documentation\n        )\n        \n        self.register_macro(\n            \u003Cspan class=\"hljs-string\">&#x27;Meeting Minutes Template&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Ctrl+Alt+M&#x27;\u003C/span>,\n            self.create_meeting_minutes\n        )\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">transform_to_title_case\u003C/span>(\u003Cspan class=\"hljs-params\">self, editor, selection: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Convert selected text to title case appropriate for headings.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-comment\"># Words that should remain lowercase in titles\u003C/span>\n        minor_words = {\u003Cspan class=\"hljs-string\">&#x27;a&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;an&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;and&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;as&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;at&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;but&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;by&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;for&#x27;\u003C/span>, \n                      \u003Cspan class=\"hljs-string\">&#x27;if&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;in&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;nor&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;of&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;on&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;or&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;so&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;the&#x27;\u003C/span>, \n                      \u003Cspan class=\"hljs-string\">&#x27;to&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;up&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;yet&#x27;\u003C/span>}\n        \n        words = selection.lower().split()\n        title_words = []\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> i, word \u003Cspan class=\"hljs-keyword\">in\u003C/span> \u003Cspan class=\"hljs-built_in\">enumerate\u003C/span>(words):\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> i == \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-keyword\">or\u003C/span> i == \u003Cspan class=\"hljs-built_in\">len\u003C/span>(words) - \u003Cspan class=\"hljs-number\">1\u003C/span> \u003Cspan class=\"hljs-keyword\">or\u003C/span> word \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> minor_words:\n                \u003Cspan class=\"hljs-comment\"># Capitalize first letter, handle contractions and hyphenated words\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&#x27;&quot;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> word:\n                    parts = word.split(\u003Cspan class=\"hljs-string\">&quot;&#x27;&quot;\u003C/span>)\n                    word = parts[\u003Cspan class=\"hljs-number\">0\u003C/span>].capitalize() + \u003Cspan class=\"hljs-string\">&quot;&#x27;&quot;\u003C/span> + parts[\u003Cspan class=\"hljs-number\">1\u003C/span>].lower()\n                \u003Cspan class=\"hljs-keyword\">elif\u003C/span> \u003Cspan class=\"hljs-string\">&quot;-&quot;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> word:\n                    parts = word.split(\u003Cspan class=\"hljs-string\">&quot;-&quot;\u003C/span>)\n                    word = \u003Cspan class=\"hljs-string\">&quot;-&quot;\u003C/span>.join(part.capitalize() \u003Cspan class=\"hljs-keyword\">for\u003C/span> part \u003Cspan class=\"hljs-keyword\">in\u003C/span> parts)\n                \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n                    word = word.capitalize()\n            title_words.append(word)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>.join(title_words)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">convert_url_to_link\u003C/span>(\u003Cspan class=\"hljs-params\">self, editor, selection: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Convert URL to properly formatted Markdown link.&quot;&quot;&quot;\u003C/span>\n        url_pattern = re.\u003Cspan class=\"hljs-built_in\">compile\u003C/span>(\n            \u003Cspan class=\"hljs-string\">r&#x27;http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&amp;+]|[!*\\\\(\\\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+&#x27;\u003C/span>\n        )\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> url_pattern.\u003Cspan class=\"hljs-keyword\">match\u003C/span>(selection):\n            \u003Cspan class=\"hljs-comment\"># Extract meaningful title from URL\u003C/span>\n            title = self.extract_title_from_url(selection)\n            link_text = \u003Cspan class=\"hljs-built_in\">input\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;Link text (default: \u003Cspan class=\"hljs-subst\">{title}\u003C/span>): &quot;\u003C/span>) \u003Cspan class=\"hljs-keyword\">or\u003C/span> title\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">f&quot;[\u003Cspan class=\"hljs-subst\">{link_text}\u003C/span>](\u003Cspan class=\"hljs-subst\">{selection}\u003C/span>)&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> selection  \u003Cspan class=\"hljs-comment\"># Return unchanged if not a URL\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">extract_title_from_url\u003C/span>(\u003Cspan class=\"hljs-params\">self, url: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Extract a meaningful title from a URL.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-comment\"># Remove protocol and www\u003C/span>\n        clean_url = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;^https?://(www\\.)?&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>, url)\n        \n        \u003Cspan class=\"hljs-comment\"># Extract domain and path\u003C/span>\n        parts = clean_url.split(\u003Cspan class=\"hljs-string\">&#x27;/&#x27;\u003C/span>)\n        domain = parts[\u003Cspan class=\"hljs-number\">0\u003C/span>].replace(\u003Cspan class=\"hljs-string\">&#x27;.com&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>).replace(\u003Cspan class=\"hljs-string\">&#x27;.org&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>).replace(\u003Cspan class=\"hljs-string\">&#x27;.net&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-built_in\">len\u003C/span>(parts) &gt; \u003Cspan class=\"hljs-number\">1\u003C/span> \u003Cspan class=\"hljs-keyword\">and\u003C/span> parts[-\u003Cspan class=\"hljs-number\">1\u003C/span>]:\n            \u003Cspan class=\"hljs-comment\"># Use last path segment if available\u003C/span>\n            title = parts[-\u003Cspan class=\"hljs-number\">1\u003C/span>].replace(\u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>).replace(\u003Cspan class=\"hljs-string\">&#x27;_&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>).title()\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n            title = domain.title()\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> title\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">generate_smart_table\u003C/span>(\u003Cspan class=\"hljs-params\">self, editor, selection: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Generate table based on tab-separated or comma-separated values.&quot;&quot;&quot;\u003C/span>\n        lines = selection.strip().split(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> lines:\n            \u003Cspan class=\"hljs-comment\"># Create empty table template\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> self.create_empty_table()\n        \n        \u003Cspan class=\"hljs-comment\"># Detect delimiter\u003C/span>\n        first_line = lines[\u003Cspan class=\"hljs-number\">0\u003C/span>]\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;\\t&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> first_line:\n            delimiter = \u003Cspan class=\"hljs-string\">&#x27;\\t&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">elif\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;,&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> first_line:\n            delimiter = \u003Cspan class=\"hljs-string\">&#x27;,&#x27;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n            delimiter = \u003Cspan class=\"hljs-literal\">None\u003C/span>\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> delimiter:\n            table_rows = []\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> line \u003Cspan class=\"hljs-keyword\">in\u003C/span> lines:\n                cells = [cell.strip() \u003Cspan class=\"hljs-keyword\">for\u003C/span> cell \u003Cspan class=\"hljs-keyword\">in\u003C/span> line.split(delimiter)]\n                table_rows.append(cells)\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> self.format_as_markdown_table(table_rows)\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> self.create_empty_table()\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">create_empty_table\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Create an empty 3x3 table template.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;| Header 1 | Header 2 | Header 3 |\n|----------|----------|----------|\n| Cell 1   | Cell 2   | Cell 3   |\n| Cell 4   | Cell 5   | Cell 6   |&quot;&quot;&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">format_as_markdown_table\u003C/span>(\u003Cspan class=\"hljs-params\">self, rows: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>]]\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Format 2D array as Markdown table.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> rows:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C/span>\n        \n        \u003Cspan class=\"hljs-comment\"># Determine column widths\u003C/span>\n        max_cols = \u003Cspan class=\"hljs-built_in\">max\u003C/span>(\u003Cspan class=\"hljs-built_in\">len\u003C/span>(row) \u003Cspan class=\"hljs-keyword\">for\u003C/span> row \u003Cspan class=\"hljs-keyword\">in\u003C/span> rows)\n        col_widths = []\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> col \u003Cspan class=\"hljs-keyword\">in\u003C/span> \u003Cspan class=\"hljs-built_in\">range\u003C/span>(max_cols):\n            max_width = \u003Cspan class=\"hljs-number\">0\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> row \u003Cspan class=\"hljs-keyword\">in\u003C/span> rows:\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> col &lt; \u003Cspan class=\"hljs-built_in\">len\u003C/span>(row):\n                    max_width = \u003Cspan class=\"hljs-built_in\">max\u003C/span>(max_width, \u003Cspan class=\"hljs-built_in\">len\u003C/span>(row[col]))\n            col_widths.append(\u003Cspan class=\"hljs-built_in\">max\u003C/span>(max_width, \u003Cspan class=\"hljs-number\">8\u003C/span>))  \u003Cspan class=\"hljs-comment\"># Minimum width of 8\u003C/span>\n        \n        \u003Cspan class=\"hljs-comment\"># Format table\u003C/span>\n        table_lines = []\n        \n        \u003Cspan class=\"hljs-comment\"># Header row\u003C/span>\n        header = \u003Cspan class=\"hljs-string\">&quot;|&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> i, cell \u003Cspan class=\"hljs-keyword\">in\u003C/span> \u003Cspan class=\"hljs-built_in\">enumerate\u003C/span>(rows[\u003Cspan class=\"hljs-number\">0\u003C/span>] \u003Cspan class=\"hljs-keyword\">if\u003C/span> rows \u003Cspan class=\"hljs-keyword\">else\u003C/span> []):\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> i &lt; max_cols:\n                header += \u003Cspan class=\"hljs-string\">f&quot; \u003Cspan class=\"hljs-subst\">{cell.ljust(col_widths[i])}\u003C/span> |&quot;\u003C/span>\n        table_lines.append(header)\n        \n        \u003Cspan class=\"hljs-comment\"># Separator row\u003C/span>\n        separator = \u003Cspan class=\"hljs-string\">&quot;|&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> width \u003Cspan class=\"hljs-keyword\">in\u003C/span> col_widths:\n            separator += \u003Cspan class=\"hljs-string\">f&quot; \u003Cspan class=\"hljs-subst\">{\u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span> * width}\u003C/span> |&quot;\u003C/span>\n        table_lines.append(separator)\n        \n        \u003Cspan class=\"hljs-comment\"># Data rows\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> row \u003Cspan class=\"hljs-keyword\">in\u003C/span> rows[\u003Cspan class=\"hljs-number\">1\u003C/span>:]:\n            row_line = \u003Cspan class=\"hljs-string\">&quot;|&quot;\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> i \u003Cspan class=\"hljs-keyword\">in\u003C/span> \u003Cspan class=\"hljs-built_in\">range\u003C/span>(max_cols):\n                cell = row[i] \u003Cspan class=\"hljs-keyword\">if\u003C/span> i &lt; \u003Cspan class=\"hljs-built_in\">len\u003C/span>(row) \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C/span>\n                row_line += \u003Cspan class=\"hljs-string\">f&quot; \u003Cspan class=\"hljs-subst\">{cell.ljust(col_widths[i])}\u003C/span> |&quot;\u003C/span>\n            table_lines.append(row_line)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\\n&quot;\u003C/span>.join(table_lines)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">generate_document_outline\u003C/span>(\u003Cspan class=\"hljs-params\">self, editor, selection: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Generate table of contents from document headings.&quot;&quot;&quot;\u003C/span>\n        content = editor.get_full_content() \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-built_in\">hasattr\u003C/span>(editor, \u003Cspan class=\"hljs-string\">&#x27;get_full_content&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">else\u003C/span> selection\n        \n        headings = re.findall(\u003Cspan class=\"hljs-string\">r&#x27;^(#{1,6})\\s+(.+)$&#x27;\u003C/span>, content, re.MULTILINE)\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> headings:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot;No headings found in document.&quot;\u003C/span>\n        \n        toc_lines = [\u003Cspan class=\"hljs-string\">&quot;## Table of Contents\\n&quot;\u003C/span>]\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> heading_marks, heading_text \u003Cspan class=\"hljs-keyword\">in\u003C/span> headings:\n            level = \u003Cspan class=\"hljs-built_in\">len\u003C/span>(heading_marks) - \u003Cspan class=\"hljs-number\">1\u003C/span>  \u003Cspan class=\"hljs-comment\"># Adjust for TOC indentation\u003C/span>\n            indent = \u003Cspan class=\"hljs-string\">&quot;  &quot;\u003C/span> * level\n            \n            \u003Cspan class=\"hljs-comment\"># Create anchor link\u003C/span>\n            anchor = heading_text.lower()\n            anchor = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;[^\\w\\s-]&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>, anchor)\n            anchor = re.sub(\u003Cspan class=\"hljs-string\">r&#x27;\\s+&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span>, anchor)\n            \n            toc_lines.append(\u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{indent}\u003C/span>- [\u003Cspan class=\"hljs-subst\">{heading_text}\u003C/span>](#\u003Cspan class=\"hljs-subst\">{anchor}\u003C/span>)&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\\n&quot;\u003C/span>.join(toc_lines)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">create_bibliography_entry\u003C/span>(\u003Cspan class=\"hljs-params\">self, editor, selection: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Create formatted bibliography entry from URL or citation info.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> selection.startswith(\u003Cspan class=\"hljs-string\">&#x27;http&#x27;\u003C/span>):\n            \u003Cspan class=\"hljs-comment\"># URL format\u003C/span>\n            title = \u003Cspan class=\"hljs-built_in\">input\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;Article/Page title: &quot;\u003C/span>)\n            author = \u003Cspan class=\"hljs-built_in\">input\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;Author (optional): &quot;\u003C/span>)\n            date = \u003Cspan class=\"hljs-built_in\">input\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;Publication date (YYYY-MM-DD, optional): &quot;\u003C/span>)\n            \n            entry_parts = []\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> author:\n                entry_parts.append(\u003Cspan class=\"hljs-string\">f&quot;\u003Cspan class=\"hljs-subst\">{author}\u003C/span>.&quot;\u003C/span>)\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> title:\n                entry_parts.append(\u003Cspan class=\"hljs-string\">f&#x27;&quot;\u003Cspan class=\"hljs-subst\">{title}\u003C/span>.&quot;&#x27;\u003C/span>)\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> date:\n                entry_parts.append(\u003Cspan class=\"hljs-string\">f&quot;Accessed \u003Cspan class=\"hljs-subst\">{date}\u003C/span>.&quot;\u003C/span>)\n            entry_parts.append(\u003Cspan class=\"hljs-string\">f&quot;&lt;\u003Cspan class=\"hljs-subst\">{selection}\u003C/span>&gt;.&quot;\u003C/span>)\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot; &quot;\u003C/span>.join(entry_parts)\n        \u003Cspan class=\"hljs-keyword\">else\u003C/span>:\n            \u003Cspan class=\"hljs-comment\"># Manual entry template\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Author, A. A. (Year). *Title of work*. Publisher. &lt;URL&gt;&quot;&quot;&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">create_code_documentation\u003C/span>(\u003Cspan class=\"hljs-params\">self, editor, selection: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">str\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Create code documentation block template.&quot;&quot;&quot;\u003C/span>\n        function_name = \u003Cspan class=\"hljs-built_in\">input\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;Function/method name: &quot;\u003C/span>)\n        language = \u003Cspan class=\"hljs-built_in\">input\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;Programming language: &quot;\u003C/span>) \u003Cspan class=\"hljs-keyword\">or\u003C/span> \u003Cspan class=\"hljs-string\">&quot;javascript&quot;\u003C/span>\n        \n        template = \u003Cspan class=\"hljs-string\">f&quot;&quot;&quot;## `\u003Cspan class=\"hljs-subst\">{function_name}\u003C/span>()`\n\n**Description**: Brief description of what this function does.\n\n**Parameters**:\n- `param1` (type): Description of parameter\n- `param2` (type): Description of parameter\n\n**Returns**: \nType and description of return value\n\n**Example**:\n```\u003Cspan class=\"hljs-subst\">{language}\u003C/span>\n// Usage example\n\u003Cspan class=\"hljs-subst\">{function_name}\u003C/span>(arg1, arg2);\u003C/span>\n\u003C/code>\u003C/pre>\u003Cp>\u003Cstrong>Notes\u003C/strong>:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cp>Additional implementation notes\u003C/p>\n\u003C/li>\n\u003Cli>\u003Cp>Performance considerations\u003C/p>\n\u003C/li>\n\u003Cli>\u003Cp>Related functions or methods&quot;&quot;&quot;\u003C/p>\n\u003Cpre>\u003Ccode>  return template\n\u003C/code>\u003C/pre>\u003Cp>  def create_meeting_minutes(self, editor, selection: str) -&gt; str:\u003Cbr>  &quot;&quot;&quot;Create meeting minutes template.&quot;&quot;&quot;\u003Cbr>  meeting_title = input(&quot;Meeting title: &quot;)\u003Cbr>  date = datetime.now().strftime(&quot;%Y-%m-%d&quot;)\u003Cbr>  time = datetime.now().strftime(&quot;%H:%M&quot;)\u003Cbr>\u003Cbr>  template = f&quot;&quot;&quot;# {meeting_title}\u003C/p>\n\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cstrong>Date\u003C/strong>: {date}\u003Cbr>\u003Cstrong>Time\u003C/strong>: {time}\u003Cbr>\u003Cstrong>Location\u003C/strong>: [Meeting location/platform]\u003Cbr>\u003Cstrong>Facilitator\u003C/strong>: [Name]\u003Cbr>\u003Cstrong>Note-taker\u003C/strong>: [Name]  \u003C/p>\n\u003Ch2 id=\"attendees\">Attendees\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cinput disabled=\"\" type=\"checkbox\"> [Name 1]\u003C/li>\n\u003Cli>\u003Cinput disabled=\"\" type=\"checkbox\"> [Name 2]\u003C/li>\n\u003Cli>\u003Cinput disabled=\"\" type=\"checkbox\"> [Name 3]\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"agenda\">Agenda\u003C/h2>\n\u003Col>\n\u003Cli>[Agenda item 1]\u003C/li>\n\u003Cli>[Agenda item 2]\u003C/li>\n\u003Cli>[Agenda item 3]\u003C/li>\n\u003C/ol>\n\u003Ch2 id=\"discussion-notes\">Discussion Notes\u003C/h2>\n\u003Ch3 id=\"topic-1\">[Topic 1]\u003C/h3>\n\u003Cul>\n\u003Cli>Discussion points\u003C/li>\n\u003Cli>Decisions made\u003C/li>\n\u003Cli>Concerns raised\u003C/li>\n\u003C/ul>\n\u003Ch3 id=\"topic-2\">[Topic 2]\u003C/h3>\n\u003Cul>\n\u003Cli>Discussion points\u003C/li>\n\u003Cli>Decisions made\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"action-items\">Action Items\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cinput disabled=\"\" type=\"checkbox\"> [Action item] - [Owner] - [Due date]\u003C/li>\n\u003Cli>\u003Cinput disabled=\"\" type=\"checkbox\"> [Action item] - [Owner] - [Due date]\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"decisions-made\">Decisions Made\u003C/h2>\n\u003Col>\n\u003Cli>[Decision 1] - [Rationale]\u003C/li>\n\u003Cli>[Decision 2] - [Rationale]\u003C/li>\n\u003C/ol>\n\u003Ch2 id=\"next-meeting\">Next Meeting\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cp>\u003Cstrong>Date\u003C/strong>: [Next meeting date]\u003C/p>\n\u003C/li>\n\u003Cli>\u003Cp>\u003Cstrong>Agenda items\u003C/strong>: [Items to discuss]&quot;&quot;&quot;\u003C/p>\n\u003Cpre>\u003Ccode>  return template\n\u003C/code>\u003C/pre>\u003Cp>  def execute_macro(self, shortcut: str, editor, selection: str = &quot;&quot;) -&gt; str:\u003Cbr>  &quot;&quot;&quot;Execute a macro by its keyboard shortcut.&quot;&quot;&quot;\u003Cbr>  if shortcut not in self.macros:\u003Cbr>      raise KeyError(f&quot;No macro registered for shortcut: {shortcut}&quot;)\u003Cbr>\u003Cbr>  macro = self.macros[shortcut]\u003Cbr>  macro[&#39;usage_count&#39;] += 1\u003Cbr>\u003Cbr>  # Record macro usage\u003Cbr>  self.macro_history.append({\u003Cbr>      &#39;shortcut&#39;: shortcut,\u003Cbr>      &#39;name&#39;: macro[&#39;name&#39;],\u003Cbr>      &#39;timestamp&#39;: datetime.now(),\u003Cbr>      &#39;selection_length&#39;: len(selection)\u003Cbr>  })\u003Cbr>\u003Cbr>  try:\u003Cbr>      result = macro[&#39;handler&#39;](editor, selection)\u003Cbr>      return result if result is not None else selection\u003Cbr>  except Exception as e:\u003Cbr>      print(f&quot;Error executing macro {macro[&#39;name&#39;]}: {e}&quot;)\u003Cbr>      return selection\u003Cbr>  def get_macro_statistics(self) -&gt; Dict:\u003Cbr>  &quot;&quot;&quot;Get usage statistics for all macros.&quot;&quot;&quot;\u003Cbr>  stats = {\u003Cbr>      &#39;total_macros&#39;: len(self.macros),\u003Cbr>      &#39;total_executions&#39;: len(self.macro_history),\u003Cbr>      &#39;most_used&#39;: None,\u003Cbr>      &#39;usage_by_macro&#39;: {}\u003Cbr>  }\u003Cbr>\u003Cbr>  for shortcut, macro in self.macros.items():\u003Cbr>      stats[&#39;usage_by_macro&#39;][shortcut] = {\u003Cbr>          &#39;name&#39;: macro[&#39;name&#39;],\u003Cbr>          &#39;usage_count&#39;: macro[&#39;usage_count&#39;],\u003Cbr>          &#39;created_date&#39;: macro[&#39;created_date&#39;].isoformat()\u003Cbr>      }\u003Cbr>\u003Cbr>  # Find most used macro\u003Cbr>  if stats[&#39;usage_by_macro&#39;]:\u003Cbr>      most_used_shortcut = max(\u003Cbr>          stats[&#39;usage_by_macro&#39;].keys(),\u003Cbr>          key=lambda k: stats[&#39;usage_by_macro&#39;][k][&#39;usage_count&#39;]\u003Cbr>      )\u003Cbr>      stats[&#39;most_used&#39;] = {\u003Cbr>          &#39;shortcut&#39;: most_used_shortcut,\u003Cbr>          &#39;name&#39;: stats[&#39;usage_by_macro&#39;][most_used_shortcut][&#39;name&#39;],\u003Cbr>          &#39;count&#39;: stats[&#39;usage_by_macro&#39;][most_used_shortcut][&#39;usage_count&#39;]\u003Cbr>      }\u003Cbr>\u003Cbr>  return stats\u003C/p>\n\u003C/li>\n\u003C/ul>\n\u003Ch1 id=\"example-usage-and-integration\">Example usage and integration\u003C/h1>\n\u003Cp>def demo_macro_system():\u003Cbr>    &quot;&quot;&quot;Demonstrate the macro system capabilities.&quot;&quot;&quot;\u003Cbr>    macro_system = MarkdownMacroSystem()\u003C/p>\n\u003Cpre>\u003Ccode># Simulate editor interface\nclass MockEditor:\n    def __init__(self):\n        self.content = &quot;# Document Title\\n\\n## Section 1\\n\\n### Subsection\\n\\nContent here.&quot;\n    \n    def get_full_content(self):\n        return self.content\n\neditor = MockEditor()\n\n# Test different macros\ntest_cases = [\n    {\n        &#39;shortcut&#39;: &#39;Ctrl+Alt+T&#39;,\n        &#39;selection&#39;: &#39;this is a test title&#39;,\n        &#39;description&#39;: &#39;Title case transformation&#39;\n    },\n    {\n        &#39;shortcut&#39;: &#39;Ctrl+Alt+L&#39;,\n        &#39;selection&#39;: &#39;https://example.com/great-article&#39;,\n        &#39;description&#39;: &#39;URL to link conversion&#39;\n    },\n    {\n        &#39;shortcut&#39;: &#39;Ctrl+Alt+O&#39;,\n        &#39;selection&#39;: &#39;&#39;,\n        &#39;description&#39;: &#39;Document outline generation&#39;\n    }\n]\n\nprint(&quot;Markdown Macro System Demo&quot;)\nprint(&quot;=&quot; * 30)\n\nfor test in test_cases:\n    print(f&quot;\\n{test[&#39;description&#39;]}:&quot;)\n    print(f&quot;Input: {test[&#39;selection&#39;]}&quot;)\n    result = macro_system.execute_macro(test[&#39;shortcut&#39;], editor, test[&#39;selection&#39;])\n    print(f&quot;Output: {result}&quot;)\n\n# Show usage statistics\nstats = macro_system.get_macro_statistics()\nprint(f&quot;\\nMacro Usage Statistics:&quot;)\nprint(f&quot;Total macros: {stats[&#39;total_macros&#39;]}&quot;)\nprint(f&quot;Total executions: {stats[&#39;total_executions&#39;]}&quot;)\n\u003C/code>\u003C/pre>\u003Cp>if \u003Cstrong>name\u003C/strong> == &quot;\u003Cstrong>main\u003C/strong>&quot;:\u003Cbr>    demo_macro_system()\u003C/p>\n\u003Cpre>\u003Ccode>\n## Integration with Content Management Systems\n\nKeyboard shortcuts work seamlessly with modern content workflows. When combined with [automation systems and workflow integration](https://blog.markdowntools.com/posts/markdown-automation-workflows-complete-guide), shortcuts become part of comprehensive productivity systems where automated processes complement manual efficiency techniques, creating seamless content creation pipelines that minimize friction between ideation and publication.\n\nFor sophisticated documentation systems, shortcut optimization complements [Progressive Web App documentation features](https://blog.markdowntools.com/posts/markdown-progressive-web-app-documentation-complete-guide) by enabling offline-capable editing environments where keyboard shortcuts function consistently across network conditions, supporting distributed teams and mobile-first content creation workflows.\n\nWhen building comprehensive content architectures, keyboard efficiency techniques integrate effectively with [link management and cross-referencing systems](https://blog.markdowntools.com/posts/markdown-link-management-cross-referencing-complete-guide) to create workflows where shortcuts automatically generate proper cross-references, maintain link integrity, and support complex content relationship management through efficient keyboard-driven interfaces.\n\n## Best Practices and Workflow Integration\n\n### Ergonomic Considerations\n\n**Preventing Repetitive Strain Injuries:**\n\n```markdown\n# Ergonomic Shortcut Guidelines\n\n## Hand Position and Movement Patterns\n- **Alternate Hands**: Distribute shortcuts across both hands to prevent overuse\n- **Avoid Stretching**: Use modifier keys that don&#39;t require uncomfortable hand positions\n- **Chord Progressions**: Design shortcut sequences that flow naturally\n\n## Recommended Shortcut Patterns\n### Low-Strain Combinations\n- `Ctrl + letter`: Most comfortable for frequent use\n- `Alt + letter`: Good for secondary functions\n- `Ctrl + Shift + letter`: Reserve for less frequent operations\n\n### High-Strain Combinations (Use Sparingly)\n- `Ctrl + Alt + letter`: Requires both hands, use for advanced functions\n- `Ctrl + Shift + Alt + letter`: Avoid or create alternative access methods\n\n## Break Patterns\n- Take 30-second breaks every 10 minutes of intensive editing\n- Use voice-to-text for longer content creation sessions\n- Implement stretch routines between documents\n\u003C/code>\u003C/pre>\u003Ch3 id=\"productivity-measurement\">Productivity Measurement\u003C/h3>\n\u003Cp>\u003Cstrong>Tracking Efficiency Improvements:\u003C/strong>\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-python\">\u003Cspan class=\"hljs-comment\"># productivity_tracker.py - Measure keyboard shortcut efficiency\u003C/span>\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> time\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> datetime \u003Cspan class=\"hljs-keyword\">import\u003C/span> datetime, timedelta\n\u003Cspan class=\"hljs-keyword\">from\u003C/span> typing \u003Cspan class=\"hljs-keyword\">import\u003C/span> \u003Cspan class=\"hljs-type\">Dict\u003C/span>, \u003Cspan class=\"hljs-type\">List\u003C/span>\n\u003Cspan class=\"hljs-keyword\">import\u003C/span> json\n\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">ShortcutProductivityTracker\u003C/span>:\n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">__init__\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        self.session_data = {\n            \u003Cspan class=\"hljs-string\">&#x27;start_time&#x27;\u003C/span>: \u003Cspan class=\"hljs-literal\">None\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;keystrokes&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>: {},\n            \u003Cspan class=\"hljs-string\">&#x27;words_written&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;characters_written&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;formatting_actions&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;mouse_actions&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>\n        }\n        \n        self.historical_data = self.load_historical_data()\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">start_session\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Begin tracking a writing session.&quot;&quot;&quot;\u003C/span>\n        self.session_data[\u003Cspan class=\"hljs-string\">&#x27;start_time&#x27;\u003C/span>] = datetime.now()\n        self.session_data[\u003Cspan class=\"hljs-string\">&#x27;keystrokes&#x27;\u003C/span>] = \u003Cspan class=\"hljs-number\">0\u003C/span>\n        self.session_data[\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>] = {}\n        \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">record_shortcut\u003C/span>(\u003Cspan class=\"hljs-params\">self, shortcut: \u003Cspan class=\"hljs-built_in\">str\u003C/span>, time_saved_estimate: \u003Cspan class=\"hljs-built_in\">float\u003C/span> = \u003Cspan class=\"hljs-number\">2.0\u003C/span>\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Record usage of a keyboard shortcut.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> shortcut \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> self.session_data[\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>]:\n            self.session_data[\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>][shortcut] = {\n                \u003Cspan class=\"hljs-string\">&#x27;count&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>,\n                \u003Cspan class=\"hljs-string\">&#x27;time_saved&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0.0\u003C/span>\n            }\n        \n        self.session_data[\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>][shortcut][\u003Cspan class=\"hljs-string\">&#x27;count&#x27;\u003C/span>] += \u003Cspan class=\"hljs-number\">1\u003C/span>\n        self.session_data[\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>][shortcut][\u003Cspan class=\"hljs-string\">&#x27;time_saved&#x27;\u003C/span>] += time_saved_estimate\n        self.session_data[\u003Cspan class=\"hljs-string\">&#x27;formatting_actions&#x27;\u003C/span>] += \u003Cspan class=\"hljs-number\">1\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">record_mouse_action\u003C/span>(\u003Cspan class=\"hljs-params\">self, action_type: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Record a mouse-based action for comparison.&quot;&quot;&quot;\u003C/span>\n        self.session_data[\u003Cspan class=\"hljs-string\">&#x27;mouse_actions&#x27;\u003C/span>] += \u003Cspan class=\"hljs-number\">1\u003C/span>\n        \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">record_content_metrics\u003C/span>(\u003Cspan class=\"hljs-params\">self, content: \u003Cspan class=\"hljs-built_in\">str\u003C/span>\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Update content creation metrics.&quot;&quot;&quot;\u003C/span>\n        self.session_data[\u003Cspan class=\"hljs-string\">&#x27;words_written&#x27;\u003C/span>] = \u003Cspan class=\"hljs-built_in\">len\u003C/span>(content.split())\n        self.session_data[\u003Cspan class=\"hljs-string\">&#x27;characters_written&#x27;\u003C/span>] = \u003Cspan class=\"hljs-built_in\">len\u003C/span>(content)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">end_session\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;End session and calculate productivity metrics.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> self.session_data[\u003Cspan class=\"hljs-string\">&#x27;start_time&#x27;\u003C/span>]:\n            \u003Cspan class=\"hljs-keyword\">raise\u003C/span> ValueError(\u003Cspan class=\"hljs-string\">&quot;Session not started&quot;\u003C/span>)\n        \n        end_time = datetime.now()\n        duration = end_time - self.session_data[\u003Cspan class=\"hljs-string\">&#x27;start_time&#x27;\u003C/span>]\n        \n        session_summary = {\n            \u003Cspan class=\"hljs-string\">&#x27;session_date&#x27;\u003C/span>: self.session_data[\u003Cspan class=\"hljs-string\">&#x27;start_time&#x27;\u003C/span>].isoformat(),\n            \u003Cspan class=\"hljs-string\">&#x27;duration_minutes&#x27;\u003C/span>: duration.total_seconds() / \u003Cspan class=\"hljs-number\">60\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;words_per_minute&#x27;\u003C/span>: self.session_data[\u003Cspan class=\"hljs-string\">&#x27;words_written&#x27;\u003C/span>] / (duration.total_seconds() / \u003Cspan class=\"hljs-number\">60\u003C/span>) \u003Cspan class=\"hljs-keyword\">if\u003C/span> duration.total_seconds() &gt; \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;characters_per_minute&#x27;\u003C/span>: self.session_data[\u003Cspan class=\"hljs-string\">&#x27;characters_written&#x27;\u003C/span>] / (duration.total_seconds() / \u003Cspan class=\"hljs-number\">60\u003C/span>) \u003Cspan class=\"hljs-keyword\">if\u003C/span> duration.total_seconds() &gt; \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">dict\u003C/span>(self.session_data[\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>]),\n            \u003Cspan class=\"hljs-string\">&#x27;total_time_saved&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">sum\u003C/span>(data[\u003Cspan class=\"hljs-string\">&#x27;time_saved&#x27;\u003C/span>] \u003Cspan class=\"hljs-keyword\">for\u003C/span> data \u003Cspan class=\"hljs-keyword\">in\u003C/span> self.session_data[\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>].values()),\n            \u003Cspan class=\"hljs-string\">&#x27;efficiency_ratio&#x27;\u003C/span>: self.calculate_efficiency_ratio(),\n            \u003Cspan class=\"hljs-string\">&#x27;most_used_shortcut&#x27;\u003C/span>: self.get_most_used_shortcut(),\n            \u003Cspan class=\"hljs-string\">&#x27;productivity_score&#x27;\u003C/span>: self.calculate_productivity_score()\n        }\n        \n        self.save_session_data(session_summary)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> session_summary\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">calculate_efficiency_ratio\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">float\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Calculate keyboard vs mouse efficiency ratio.&quot;&quot;&quot;\u003C/span>\n        total_actions = self.session_data[\u003Cspan class=\"hljs-string\">&#x27;formatting_actions&#x27;\u003C/span>] + self.session_data[\u003Cspan class=\"hljs-string\">&#x27;mouse_actions&#x27;\u003C/span>]\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> total_actions == \u003Cspan class=\"hljs-number\">0\u003C/span>:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-number\">1.0\u003C/span>\n        \n        keyboard_ratio = self.session_data[\u003Cspan class=\"hljs-string\">&#x27;formatting_actions&#x27;\u003C/span>] / total_actions\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> keyboard_ratio\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">get_most_used_shortcut\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Identify the most frequently used shortcut in this session.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> self.session_data[\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>]:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> {}\n        \n        most_used = \u003Cspan class=\"hljs-built_in\">max\u003C/span>(\n            self.session_data[\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>].items(),\n            key=\u003Cspan class=\"hljs-keyword\">lambda\u003C/span> x: x[\u003Cspan class=\"hljs-number\">1\u003C/span>][\u003Cspan class=\"hljs-string\">&#x27;count&#x27;\u003C/span>]\n        )\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-string\">&#x27;shortcut&#x27;\u003C/span>: most_used[\u003Cspan class=\"hljs-number\">0\u003C/span>],\n            \u003Cspan class=\"hljs-string\">&#x27;count&#x27;\u003C/span>: most_used[\u003Cspan class=\"hljs-number\">1\u003C/span>][\u003Cspan class=\"hljs-string\">&#x27;count&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-string\">&#x27;time_saved&#x27;\u003C/span>: most_used[\u003Cspan class=\"hljs-number\">1\u003C/span>][\u003Cspan class=\"hljs-string\">&#x27;time_saved&#x27;\u003C/span>]\n        }\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">calculate_productivity_score\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-built_in\">float\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Calculate overall productivity score (0-100).&quot;&quot;&quot;\u003C/span>\n        base_score = \u003Cspan class=\"hljs-number\">50\u003C/span>\n        \n        \u003Cspan class=\"hljs-comment\"># Bonus for high shortcut usage\u003C/span>\n        shortcut_bonus = \u003Cspan class=\"hljs-built_in\">min\u003C/span>(\u003Cspan class=\"hljs-built_in\">len\u003C/span>(self.session_data[\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>]) * \u003Cspan class=\"hljs-number\">5\u003C/span>, \u003Cspan class=\"hljs-number\">30\u003C/span>)\n        \n        \u003Cspan class=\"hljs-comment\"># Bonus for high efficiency ratio\u003C/span>\n        efficiency_bonus = self.calculate_efficiency_ratio() * \u003Cspan class=\"hljs-number\">10\u003C/span>\n        \n        \u003Cspan class=\"hljs-comment\"># Bonus for words per minute (assuming 40 WPM baseline)\u003C/span>\n        duration = (datetime.now() - self.session_data[\u003Cspan class=\"hljs-string\">&#x27;start_time&#x27;\u003C/span>]).total_seconds() / \u003Cspan class=\"hljs-number\">60\u003C/span>\n        wpm = self.session_data[\u003Cspan class=\"hljs-string\">&#x27;words_written&#x27;\u003C/span>] / duration \u003Cspan class=\"hljs-keyword\">if\u003C/span> duration &gt; \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>\n        wpm_bonus = \u003Cspan class=\"hljs-built_in\">max\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, (wpm - \u003Cspan class=\"hljs-number\">40\u003C/span>) / \u003Cspan class=\"hljs-number\">10\u003C/span> * \u003Cspan class=\"hljs-number\">5\u003C/span>)  \u003Cspan class=\"hljs-comment\"># 5 points per 10 WPM above 40\u003C/span>\n        \n        total_score = base_score + shortcut_bonus + efficiency_bonus + wpm_bonus\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-built_in\">min\u003C/span>(total_score, \u003Cspan class=\"hljs-number\">100\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">save_session_data\u003C/span>(\u003Cspan class=\"hljs-params\">self, session_data: \u003Cspan class=\"hljs-type\">Dict\u003C/span>\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Save session data to historical records.&quot;&quot;&quot;\u003C/span>\n        self.historical_data.append(session_data)\n        \n        \u003Cspan class=\"hljs-comment\"># Keep only last 100 sessions\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-built_in\">len\u003C/span>(self.historical_data) &gt; \u003Cspan class=\"hljs-number\">100\u003C/span>:\n            self.historical_data = self.historical_data[-\u003Cspan class=\"hljs-number\">100\u003C/span>:]\n        \n        self.save_historical_data()\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">load_historical_data\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-type\">Dict\u003C/span>]:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Load historical session data.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span>:\n            \u003Cspan class=\"hljs-keyword\">with\u003C/span> \u003Cspan class=\"hljs-built_in\">open\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;productivity_history.json&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;r&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">as\u003C/span> f:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> json.load(f)\n        \u003Cspan class=\"hljs-keyword\">except\u003C/span> FileNotFoundError:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> []\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">save_historical_data\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Save historical data to file.&quot;&quot;&quot;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">with\u003C/span> \u003Cspan class=\"hljs-built_in\">open\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;productivity_history.json&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;w&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">as\u003C/span> f:\n            json.dump(self.historical_data, f, indent=\u003Cspan class=\"hljs-number\">2\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">generate_weekly_report\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">Dict\u003C/span>:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Generate productivity report for the last week.&quot;&quot;&quot;\u003C/span>\n        one_week_ago = datetime.now() - timedelta(days=\u003Cspan class=\"hljs-number\">7\u003C/span>)\n        \n        recent_sessions = [\n            session \u003Cspan class=\"hljs-keyword\">for\u003C/span> session \u003Cspan class=\"hljs-keyword\">in\u003C/span> self.historical_data\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> datetime.fromisoformat(session[\u003Cspan class=\"hljs-string\">&#x27;session_date&#x27;\u003C/span>]) &gt;= one_week_ago\n        ]\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-keyword\">not\u003C/span> recent_sessions:\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\u003Cspan class=\"hljs-string\">&#x27;error&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;No data available for the last week&#x27;\u003C/span>}\n        \n        total_time = \u003Cspan class=\"hljs-built_in\">sum\u003C/span>(session[\u003Cspan class=\"hljs-string\">&#x27;duration_minutes&#x27;\u003C/span>] \u003Cspan class=\"hljs-keyword\">for\u003C/span> session \u003Cspan class=\"hljs-keyword\">in\u003C/span> recent_sessions)\n        total_words = \u003Cspan class=\"hljs-built_in\">sum\u003C/span>(session.get(\u003Cspan class=\"hljs-string\">&#x27;words_written&#x27;\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>) \u003Cspan class=\"hljs-keyword\">for\u003C/span> session \u003Cspan class=\"hljs-keyword\">in\u003C/span> recent_sessions)\n        \n        \u003Cspan class=\"hljs-comment\"># Aggregate shortcut usage\u003C/span>\n        all_shortcuts = {}\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> session \u003Cspan class=\"hljs-keyword\">in\u003C/span> recent_sessions:\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> shortcut, data \u003Cspan class=\"hljs-keyword\">in\u003C/span> session.get(\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>, {}).items():\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> shortcut \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> all_shortcuts:\n                    all_shortcuts[shortcut] = {\u003Cspan class=\"hljs-string\">&#x27;count&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;time_saved&#x27;\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>}\n                all_shortcuts[shortcut][\u003Cspan class=\"hljs-string\">&#x27;count&#x27;\u003C/span>] += data[\u003Cspan class=\"hljs-string\">&#x27;count&#x27;\u003C/span>]\n                all_shortcuts[shortcut][\u003Cspan class=\"hljs-string\">&#x27;time_saved&#x27;\u003C/span>] += data[\u003Cspan class=\"hljs-string\">&#x27;time_saved&#x27;\u003C/span>]\n        \n        avg_productivity = \u003Cspan class=\"hljs-built_in\">sum\u003C/span>(session[\u003Cspan class=\"hljs-string\">&#x27;productivity_score&#x27;\u003C/span>] \u003Cspan class=\"hljs-keyword\">for\u003C/span> session \u003Cspan class=\"hljs-keyword\">in\u003C/span> recent_sessions) / \u003Cspan class=\"hljs-built_in\">len\u003C/span>(recent_sessions)\n        avg_efficiency = \u003Cspan class=\"hljs-built_in\">sum\u003C/span>(session[\u003Cspan class=\"hljs-string\">&#x27;efficiency_ratio&#x27;\u003C/span>] \u003Cspan class=\"hljs-keyword\">for\u003C/span> session \u003Cspan class=\"hljs-keyword\">in\u003C/span> recent_sessions) / \u003Cspan class=\"hljs-built_in\">len\u003C/span>(recent_sessions)\n        \n        report = {\n            \u003Cspan class=\"hljs-string\">&#x27;period&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;7 days&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;total_sessions&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">len\u003C/span>(recent_sessions),\n            \u003Cspan class=\"hljs-string\">&#x27;total_writing_time&#x27;\u003C/span>: total_time,\n            \u003Cspan class=\"hljs-string\">&#x27;total_words_written&#x27;\u003C/span>: total_words,\n            \u003Cspan class=\"hljs-string\">&#x27;average_productivity_score&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">round\u003C/span>(avg_productivity, \u003Cspan class=\"hljs-number\">1\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;average_efficiency_ratio&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">round\u003C/span>(avg_efficiency, \u003Cspan class=\"hljs-number\">3\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;total_time_saved&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">sum\u003C/span>(data[\u003Cspan class=\"hljs-string\">&#x27;time_saved&#x27;\u003C/span>] \u003Cspan class=\"hljs-keyword\">for\u003C/span> data \u003Cspan class=\"hljs-keyword\">in\u003C/span> all_shortcuts.values()),\n            \u003Cspan class=\"hljs-string\">&#x27;most_valuable_shortcuts&#x27;\u003C/span>: \u003Cspan class=\"hljs-built_in\">sorted\u003C/span>(\n                all_shortcuts.items(),\n                key=\u003Cspan class=\"hljs-keyword\">lambda\u003C/span> x: x[\u003Cspan class=\"hljs-number\">1\u003C/span>][\u003Cspan class=\"hljs-string\">&#x27;time_saved&#x27;\u003C/span>],\n                reverse=\u003Cspan class=\"hljs-literal\">True\u003C/span>\n            )[:\u003Cspan class=\"hljs-number\">5\u003C/span>],\n            \u003Cspan class=\"hljs-string\">&#x27;improvement_suggestions&#x27;\u003C/span>: self.generate_improvement_suggestions(recent_sessions)\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> report\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">generate_improvement_suggestions\u003C/span>(\u003Cspan class=\"hljs-params\">self, sessions: \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-type\">Dict\u003C/span>]\u003C/span>) -&gt; \u003Cspan class=\"hljs-type\">List\u003C/span>[\u003Cspan class=\"hljs-built_in\">str\u003C/span>]:\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Generate personalized improvement suggestions.&quot;&quot;&quot;\u003C/span>\n        suggestions = []\n        \n        avg_efficiency = \u003Cspan class=\"hljs-built_in\">sum\u003C/span>(session[\u003Cspan class=\"hljs-string\">&#x27;efficiency_ratio&#x27;\u003C/span>] \u003Cspan class=\"hljs-keyword\">for\u003C/span> session \u003Cspan class=\"hljs-keyword\">in\u003C/span> sessions) / \u003Cspan class=\"hljs-built_in\">len\u003C/span>(sessions)\n        avg_productivity = \u003Cspan class=\"hljs-built_in\">sum\u003C/span>(session[\u003Cspan class=\"hljs-string\">&#x27;productivity_score&#x27;\u003C/span>] \u003Cspan class=\"hljs-keyword\">for\u003C/span> session \u003Cspan class=\"hljs-keyword\">in\u003C/span> sessions) / \u003Cspan class=\"hljs-built_in\">len\u003C/span>(sessions)\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> avg_efficiency &lt; \u003Cspan class=\"hljs-number\">0.7\u003C/span>:\n            suggestions.append(\u003Cspan class=\"hljs-string\">&quot;Consider learning more keyboard shortcuts to reduce mouse usage&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> avg_productivity &lt; \u003Cspan class=\"hljs-number\">60\u003C/span>:\n            suggestions.append(\u003Cspan class=\"hljs-string\">&quot;Practice common formatting shortcuts to improve writing speed&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-comment\"># Analyze shortcut patterns\u003C/span>\n        all_shortcuts = {}\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> session \u003Cspan class=\"hljs-keyword\">in\u003C/span> sessions:\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> shortcut, data \u003Cspan class=\"hljs-keyword\">in\u003C/span> session.get(\u003Cspan class=\"hljs-string\">&#x27;shortcuts_used&#x27;\u003C/span>, {}).items():\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> shortcut \u003Cspan class=\"hljs-keyword\">not\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> all_shortcuts:\n                    all_shortcuts[shortcut] = \u003Cspan class=\"hljs-number\">0\u003C/span>\n                all_shortcuts[shortcut] += data[\u003Cspan class=\"hljs-string\">&#x27;count&#x27;\u003C/span>]\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-built_in\">len\u003C/span>(all_shortcuts) &lt; \u003Cspan class=\"hljs-number\">5\u003C/span>:\n            suggestions.append(\u003Cspan class=\"hljs-string\">&quot;Try expanding your shortcut vocabulary - aim to use at least 10 different shortcuts regularly&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;Ctrl+C&#x27;\u003C/span> \u003Cspan class=\"hljs-keyword\">in\u003C/span> all_shortcuts \u003Cspan class=\"hljs-keyword\">and\u003C/span> all_shortcuts[\u003Cspan class=\"hljs-string\">&#x27;Ctrl+C&#x27;\u003C/span>] &gt; \u003Cspan class=\"hljs-built_in\">sum\u003C/span>(all_shortcuts.values()) * \u003Cspan class=\"hljs-number\">0.3\u003C/span>:\n            suggestions.append(\u003Cspan class=\"hljs-string\">&quot;High copy usage detected - consider using text snippets for repeated content&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> suggestions\n\n\u003Cspan class=\"hljs-comment\"># Example integration with editor\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">ShortcutEnabledEditor\u003C/span>:\n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">__init__\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        self.tracker = ShortcutProductivityTracker()\n        self.content = \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C/span>\n        \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">start_writing_session\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Begin a tracked writing session.&quot;&quot;&quot;\u003C/span>\n        self.tracker.start_session()\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;Writing session started. Productivity tracking enabled.&quot;\u003C/span>)\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">apply_bold\u003C/span>(\u003Cspan class=\"hljs-params\">self, text\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Apply bold formatting via shortcut.&quot;&quot;&quot;\u003C/span>\n        self.tracker.record_shortcut(\u003Cspan class=\"hljs-string\">&#x27;Ctrl+B&#x27;\u003C/span>, \u003Cspan class=\"hljs-number\">1.5\u003C/span>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">f&quot;**\u003Cspan class=\"hljs-subst\">{text}\u003C/span>**&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">apply_italic\u003C/span>(\u003Cspan class=\"hljs-params\">self, text\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Apply italic formatting via shortcut.&quot;&quot;&quot;\u003C/span>\n        self.tracker.record_shortcut(\u003Cspan class=\"hljs-string\">&#x27;Ctrl+I&#x27;\u003C/span>, \u003Cspan class=\"hljs-number\">1.2\u003C/span>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">f&quot;*\u003Cspan class=\"hljs-subst\">{text}\u003C/span>*&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">insert_code_block\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Insert code block via shortcut.&quot;&quot;&quot;\u003C/span>\n        self.tracker.record_shortcut(\u003Cspan class=\"hljs-string\">&#x27;Ctrl+Shift+`&#x27;\u003C/span>, \u003Cspan class=\"hljs-number\">3.0\u003C/span>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&quot;\\n```\\n// Your code here\\n```\\n&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">create_link\u003C/span>(\u003Cspan class=\"hljs-params\">self, text, url\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Create link via shortcut.&quot;&quot;&quot;\u003C/span>\n        self.tracker.record_shortcut(\u003Cspan class=\"hljs-string\">&#x27;Ctrl+K&#x27;\u003C/span>, \u003Cspan class=\"hljs-number\">2.5\u003C/span>)\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">f&quot;[\u003Cspan class=\"hljs-subst\">{text}\u003C/span>](\u003Cspan class=\"hljs-subst\">{url}\u003C/span>)&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">end_writing_session\u003C/span>(\u003Cspan class=\"hljs-params\">self\u003C/span>):\n        \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;End the writing session and show results.&quot;&quot;&quot;\u003C/span>\n        self.tracker.record_content_metrics(self.content)\n        summary = self.tracker.end_session()\n        \n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;\\nWriting Session Summary:&quot;\u003C/span>)\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;Duration: \u003Cspan class=\"hljs-subst\">{summary[\u003Cspan class=\"hljs-string\">&#x27;duration_minutes&#x27;\u003C/span>]:\u003Cspan class=\"hljs-number\">.1\u003C/span>f}\u003C/span> minutes&quot;\u003C/span>)\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;Words written: \u003Cspan class=\"hljs-subst\">{summary.get(\u003Cspan class=\"hljs-string\">&#x27;words_written&#x27;\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>)}\u003C/span>&quot;\u003C/span>)\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;Productivity score: \u003Cspan class=\"hljs-subst\">{summary[\u003Cspan class=\"hljs-string\">&#x27;productivity_score&#x27;\u003C/span>]:\u003Cspan class=\"hljs-number\">.1\u003C/span>f}\u003C/span>/100&quot;\u003C/span>)\n        \u003Cspan class=\"hljs-built_in\">print\u003C/span>(\u003Cspan class=\"hljs-string\">f&quot;Time saved by shortcuts: \u003Cspan class=\"hljs-subst\">{summary[\u003Cspan class=\"hljs-string\">&#x27;total_time_saved&#x27;\u003C/span>]:\u003Cspan class=\"hljs-number\">.1\u003C/span>f}\u003C/span> seconds&quot;\u003C/span>)\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> summary\n\n\u003Cspan class=\"hljs-comment\"># Demo usage\u003C/span>\n\u003Cspan class=\"hljs-keyword\">def\u003C/span> \u003Cspan class=\"hljs-title function_\">demo_productivity_tracking\u003C/span>():\n    \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;Demonstrate productivity tracking capabilities.&quot;&quot;&quot;\u003C/span>\n    editor = ShortcutEnabledEditor()\n    \n    \u003Cspan class=\"hljs-comment\"># Simulate a writing session\u003C/span>\n    editor.start_writing_session()\n    \n    \u003Cspan class=\"hljs-comment\"># Simulate various formatting actions\u003C/span>\n    time.sleep(\u003Cspan class=\"hljs-number\">1\u003C/span>)  \u003Cspan class=\"hljs-comment\"># Simulate writing time\u003C/span>\n    editor.content += \u003Cspan class=\"hljs-string\">&quot;This is a test document. &quot;\u003C/span>\n    \n    editor.content += editor.apply_bold(\u003Cspan class=\"hljs-string\">&quot;Important text&quot;\u003C/span>) + \u003Cspan class=\"hljs-string\">&quot; &quot;\u003C/span>\n    editor.content += \u003Cspan class=\"hljs-string\">&quot;Some more content. &quot;\u003C/span>\n    editor.content += editor.apply_italic(\u003Cspan class=\"hljs-string\">&quot;Emphasized text&quot;\u003C/span>) + \u003Cspan class=\"hljs-string\">&quot; &quot;\u003C/span>\n    editor.content += editor.insert_code_block()\n    editor.content += editor.create_link(\u003Cspan class=\"hljs-string\">&quot;Example link&quot;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;https://example.com&quot;\u003C/span>)\n    \n    time.sleep(\u003Cspan class=\"hljs-number\">2\u003C/span>)  \u003Cspan class=\"hljs-comment\"># Simulate more writing\u003C/span>\n    editor.content += \u003Cspan class=\"hljs-string\">&quot; Additional content written during the session.&quot;\u003C/span>\n    \n    \u003Cspan class=\"hljs-comment\"># End session and show results\u003C/span>\n    summary = editor.end_writing_session()\n    \n    \u003Cspan class=\"hljs-keyword\">return\u003C/span> summary\n\n\u003Cspan class=\"hljs-keyword\">if\u003C/span> __name__ == \u003Cspan class=\"hljs-string\">&quot;__main__&quot;\u003C/span>:\n    demo_productivity_tracking()\n\u003C/code>\u003C/pre>\u003Ch2 id=\"conclusion\">Conclusion\u003C/h2>\n\u003Cp>Mastering Markdown keyboard shortcuts represents a fundamental shift from inefficient, mouse-dependent workflows to streamlined, keyboard-driven productivity systems that dramatically enhance writing speed, reduce physical strain, and maintain creative flow during content creation. By implementing platform-specific optimizations, custom macro systems, and systematic productivity measurement, content creators can achieve significant efficiency gains while developing transferable skills that enhance productivity across different tools and environments.\u003C/p>\n\u003Cp>The key to successful shortcut mastery lies in gradual adoption, consistent practice, and systematic measurement of productivity improvements. Whether you&#39;re creating technical documentation, writing blog posts, or managing complex content projects, the techniques covered in this guide provide the foundation for building efficient, sustainable writing workflows that scale with your content creation needs.\u003C/p>\n\u003Cp>Remember to prioritize ergonomic considerations, regularly evaluate your shortcut usage patterns, and continuously refine your productivity systems based on real-world performance data. With careful implementation of advanced keyboard shortcut techniques, your Markdown writing workflows can achieve professional efficiency levels while maintaining the simplicity and flexibility that makes Markdown an essential tool for modern content creation.\u003C/p>\n",[15,19,22,25,28,31,34,37,40,43,46],{"id":16,"text":17,"level":18},"why-master-markdown-keyboard-shortcuts","Why Master Markdown Keyboard Shortcuts?",2,{"id":20,"text":21,"level":18},"foundation-keyboard-shortcut-principles","Foundation Keyboard Shortcut Principles",{"id":23,"text":24,"level":18},"platform-specific-optimization-strategies","Platform-Specific Optimization Strategies",{"id":26,"text":27,"level":18},"workflow-optimization-techniques","Workflow Optimization Techniques",{"id":29,"text":30,"level":18},"attendees","Attendees",{"id":32,"text":33,"level":18},"agenda","Agenda",{"id":35,"text":36,"level":18},"discussion-notes","Discussion Notes",{"id":38,"text":39,"level":18},"action-items","Action Items",{"id":41,"text":42,"level":18},"decisions-made","Decisions Made",{"id":44,"text":45,"level":18},"next-meeting","Next Meeting",{"id":47,"text":48,"level":18},"conclusion","Conclusion",[],[51,59,67],{"slug":52,"title":53,"description":54,"excerpt":55,"date":56,"category":9,"author":10,"keywords":57,"readingMinutes":58},"markdown-keyboard-shortcuts-complete-guide","Markdown Keyboard Shortcuts: Complete Guide for Efficient Technical Writing","Master keyboard shortcuts and efficiency techniques for writing Markdown faster. Learn editor-specific shortcuts, workflow optimizations, and productivity tips for technical documentation and content creation.","Keyboard shortcuts and efficiency techniques in Markdown writing transform slow, mouse-dependent documentation workflows into lightning-fast content creation processes that boost productivity and…","2025-09-09","markdown keyboard shortcuts, markdown efficiency tips, markdown productivity, technical writing shortcuts, markdown workflow, fast markdown writing, markdown editor shortcuts",13,{"slug":60,"title":61,"description":62,"excerpt":63,"date":64,"category":9,"author":10,"keywords":65,"readingMinutes":66},"markdown-table-keyboard-navigation-and-shortcuts-complete-guide","Markdown Table Keyboard Navigation and Shortcuts: Complete Guide for Efficient Table Editing","Master advanced keyboard navigation and shortcuts for Markdown table editing, including platform-specific key bindings, accessibility features, and productivity techniques for fast table manipulation and content creation.","Efficient keyboard navigation transforms Markdown table editing from a tedious click-and-type process into a fluid, productive workflow that enables rapid content creation, precise cell…","2025-11-20","markdown table keyboard navigation, markdown table shortcuts, table editing keyboard, markdown accessibility, keyboard table navigation, table editing productivity, markdown editor shortcuts, table manipulation keys",29,{"slug":68,"title":69,"description":70,"excerpt":71,"date":72,"category":9,"author":10,"keywords":73,"readingMinutes":74},"markdown-keyboard-shortcuts-efficiency-productivity-complete-guide","Markdown Keyboard Shortcuts and Efficiency: Complete Guide to Productivity Enhancement and Workflow Optimization","Master Markdown keyboard shortcuts, efficiency techniques, and productivity enhancement strategies. Learn advanced text manipulation, automation workflows, and editor-specific shortcuts for faster Markdown writing.","Advanced Markdown keyboard shortcuts and efficiency techniques enable sophisticated productivity workflows that dramatically accelerate content creation, reduce repetitive tasks, and streamline…","2025-12-12","markdown keyboard shortcuts, markdown productivity, markdown efficiency, markdown hotkeys, markdown workflow optimization, markdown automation, text editing shortcuts, markdown productivity tips",24,1792184945298]