Markdown has multiple types of lists, and in my mind checking items from those list means different things depending on the type.
- [ ] this item is open - [x] this item is close - this item is also open - ~~this item is also close~~
For checklists I want the box to be checked when I toggle the item for, others I want the item to be crossed out via strike-through. All of those actions already exist in Emacs Markdown-Mode, but they are different depending on the list, I want Emacs to do what I mean no matter the list so I added this
(defun coder--markdown-toogle-list-item-dwim () "Toogle the current list item depending on the type do the right thing. 1. When it is not a markdown list, ignore 2. When the list is a checklist indicated by [ ] check the checkbox 3. When the list is a normal list, strike-through the current item 4. When the item already has strike-through applied, un-strike it" (interactive) (save-match-data (save-excursion (when-let ((bounds (markdown-cur-list-item-bounds))) ;; move to the beginning of the item after the list marker (goto-char (cl-first bounds)) (forward-char (cl-fourth bounds)) (cond ((looking-at "\\[[\s-xX]\\]") (markdown-toggle-gfm-checkbox)) ((thing-at-point-looking-at markdown-regex-strike-through) (markdown-insert-strike-through)) (t (progn (set-mark (point)) (end-of-line) (activate-mark) ;; remove trailing whitespace from line first, this ;; otherwise breaks strikethrough rendering (delete-trailing-whitespace) (markdown-insert-strike-through))))))))
Happy markdown editing!