alphapapa / org-make-toc

Automatic tables of contents for Org-mode files
GNU General Public License v3.0
108 stars 18 forks source link

modified to keep existing CUSTOM_IDs #33

Open timbirms opened 1 month ago

timbirms commented 1 month ago
(defun org-make-toc--link-entry-github (pos)
  "Return text for entry at POS converted to GitHub style link."
  (-when-let* ((title (org-link-display-format (org-entry-get pos "ITEM")))
               (target (--> title
                            org-link-display-format
                            (downcase it)
                            (replace-regexp-in-string " " "-" it)
                            (replace-regexp-in-string "[^[:alnum:]_-]" "" it)))
               (filename (if org-make-toc-filename-prefix
                             (file-name-nondirectory (buffer-file-name))
                           "")))
    (let ((existing-id (org-entry-get pos "CUSTOM_ID")))
      ;; Only set the CUSTOM_ID if it doesn't already exist
      (unless existing-id
        (when org-make-toc-insert-custom-ids
          (setf target (or (gethash pos org-make-toc-ids)
                           (setf (gethash pos org-make-toc-ids)
                                 (org-make-toc--disambiguate target))))
          (org-set-property "CUSTOM_ID" target)))
      (org-link-make-string (concat filename "#" (or existing-id target))
                            (org-make-toc--visible-text title)))))

thank you very much for all you do!

alphapapa commented 1 month ago

Hi Tim,

Thanks, this seems like a good idea, and an obvious one in hindsight. Would you like to contribute it as a patch and have it merged?

Thanks for the kind words.