Hi,

I am unsure if the code below is appropriate for :complete property of "man" link. It does not rely on any double-dash functions or variables, but it still uses some implementation details since there is no suitable high level functions in man.el and woman.el from Emacs.

(defun org-man-complete (&optional _arg)
  "Helper for completion of links to man pages."
  (concat
   "man:"
   (let ((completion-ignore-case t)) ; See `man' comments.
     (funcall
      (if (eq org-man-command 'woman)
          #'org-man--complete-woman
        #'org-man--complete-man)
      "Manual entry: "))))

(defun org-man--complete-man (prompt)
  (require 'man)
  (let (Man-completion-cache)
    (completing-read
     prompt
     'Man-completion-table)))

(defun org-man--init-woman-cache (&optional re-cache)
  (unless (and (not re-cache)
               (or
                (and woman-expanded-directory-path
                     woman-topic-all-completions)
                (woman-read-directory-cache)))
    (setq woman-expanded-directory-path
          (woman-expand-directory-path woman-manpath woman-path))
    (setq woman-totic-all-completions
          (woman-topic-all-completions woman-expand-directory-path))
    (woman-write-directory-cache)))

(defun org-man--complete-woman (prompt)
  (require 'woman)
  (org-man--init-woman-cache)
  (completing-read prompt woman-topic-all-completions))


Reply via email to