diff options
author | John Turner <jturner.usa@gmail.com> | 2022-10-21 22:57:24 -0400 |
---|---|---|
committer | John Turner <jturner.usa@gmail.com> | 2022-10-21 22:57:24 -0400 |
commit | 0feb33b83c2432b4535702fa6926a1d6cd59919d (patch) | |
tree | 5fde0e14368642e3a3ad5a14e8736d1a1f2536de /lisp | |
parent | 89818d0d1f1d1712d00839df88c16cde923c628c (diff) | |
download | emacs.d-0feb33b83c2432b4535702fa6926a1d6cd59919d.tar.gz |
renamed man-wrapper to man-completion
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/man-completion/man-completion.el | 48 | ||||
-rw-r--r-- | lisp/man-wrapper/man-wrapper.el | 36 |
2 files changed, 48 insertions, 36 deletions
diff --git a/lisp/man-completion/man-completion.el b/lisp/man-completion/man-completion.el new file mode 100644 index 0000000..31c5bf7 --- /dev/null +++ b/lisp/man-completion/man-completion.el @@ -0,0 +1,48 @@ +(defun man-completion-is-compression-suffix (suffix) + (string-match-p "\\.bz2$\\|gzip$\\|zst$" suffix)) + +(defun man-completion-get-man-paths () + (let* ((manpath (getenv "MANPATH")) + (manpaths (split-string manpath ":" t)) + (manpaths (mapcar (lambda (path) + (file-expand-wildcards (file-name-concat path "man*"))) + manpaths)) + (manpaths (flatten-list manpaths)) + (manpaths (seq-filter 'file-exists-p manpaths))) + manpaths)) + +(defun man-completion-find-pages () + (let* ((files (mapcar (lambda (p) + (directory-files-recursively p ".+" nil)) + (man-completion-get-man-paths))) + (files (flatten-list files)) + (files (mapcar 'file-name-base files)) + (files (mapcar (lambda (f) + (if (man-completion-is-compression-suffix f) + (file-name-sans-extension f) + f)) + files))) + files)) + +(defun man-completion-locate-page (page) + (with-temp-buffer + (let ((exit-code (call-process "man" nil (current-buffer) nil "--where" page))) + (when exit-code + (let* ((output (buffer-string)) + (trimmed (string-trim-right output "\n"))) + trimmed))))) + +(defun man-completion (orig &rest args) + (interactive) + (let* ((arg (if args + (nth 0 args) + (completing-read "Select page: " + (man-completion-find-pages) + nil + t))) + (page (man-completion-locate-page arg))) + (funcall orig page))) + +(advice-add 'man :around 'man-completion) + +(provide 'man-completion) diff --git a/lisp/man-wrapper/man-wrapper.el b/lisp/man-wrapper/man-wrapper.el deleted file mode 100644 index 56544c3..0000000 --- a/lisp/man-wrapper/man-wrapper.el +++ /dev/null @@ -1,36 +0,0 @@ -(defun man-wrapper-find-pages () - (let* ((manpath (getenv "MANPATH")) - (directories (split-string manpath ":" t)) - (that-exist (seq-filter 'file-exists-p directories)) - (files (mapcar (lambda (d) - (directory-files-recursively d ".*" nil)) - that-exist)) - (flattened (flatten-list files)) - (pages (mapcar 'file-name-nondirectory flattened)) - (without-second-ext (mapcar (lambda (p) - (let ((extension (file-name-extension p))) - (if (string-match-p "^[0-9+]$" extension) - p - (file-name-sans-extension p)))) - pages))) - without-second-ext)) - -(defun man-wrapper-locate-page (page) - (with-temp-buffer - (let ((exit-code (call-process "man" nil (current-buffer) nil "--where" page))) - (when exit-code - (let* ((output (buffer-string)) - (trimmed (string-trim-right output "\n"))) - trimmed))))) - -(defun man-wrapper (orig &rest args) - (interactive) - (let* ((arg (if args - (nth 0 args) - (completing-read "Select page: " (man-wrapper-find-pages)))) - (page (man-wrapper-locate-page arg))) - (funcall orig page))) - -(advice-add 'man :around 'man-wrapper) - -(provide 'man-wrapper) |