mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-29 05:11:33 +03:00
43 lines
1.8 KiB
EmacsLisp
43 lines
1.8 KiB
EmacsLisp
;; Helper for managing issue links in markdown.
|
|
;; See also markdown-mode's interactive C-c C-c c and C-c C-c u.
|
|
|
|
(defun md-issue-refs (beginning end)
|
|
"Scan the selected region for markdown shortcut reference links
|
|
of the form [#NUM] and add/update link reference definitions
|
|
at the end, pointing to the corresponding github issues.
|
|
Removes any pre-existing #NUM link reference definitions from the region.
|
|
This is useful eg for maintaining link reference definitions in release notes.
|
|
XXX Currently hardcoded for the simonmichael/hledger repo.
|
|
XXX Does not work if parts of region are collapsed as with TAB in markdown-mode.
|
|
"
|
|
(interactive "r")
|
|
(setq beginning (min beginning end))
|
|
(setq end (max beginning end))
|
|
(let ((nums '()))
|
|
(save-excursion
|
|
(save-restriction
|
|
(widen) ;; XXX trying to make it work with collapsed regions
|
|
(narrow-to-region beginning end)
|
|
|
|
;; Remove pre-existing numeric link reference definitions
|
|
(goto-char (point-min))
|
|
(while (re-search-forward "^\\[#[0-9]+\\]:" nil t) (kill-whole-line))
|
|
|
|
;; Scan the region and collect link IDs
|
|
(goto-char (point-min))
|
|
(while (and (< (point) (point-max))
|
|
(search-forward-regexp "\\[#\\([0-9]+\\)\\]" nil t))
|
|
(setq nums (cons (match-string 1) nums)))
|
|
(setq nums (sort nums #'string-version-lessp))
|
|
(setq max-length (apply #'max (cons 0 (mapcar #'length nums))))
|
|
|
|
;; Generate link reference definitions, with urls aligned
|
|
(goto-char (point-max))
|
|
(let ((fmt (concat "%-" (number-to-string (+ 4 max-length)) "s https://github.com/simonmichael/hledger/issues/%s\n")))
|
|
(dolist (num nums)
|
|
(insert
|
|
(format fmt (format "[#%s]:" num) num))))
|
|
)
|
|
)
|
|
))
|