[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#3717: M-x man completion
From: |
Stefan Monnier |
Subject: |
bug#3717: M-x man completion |
Date: |
Tue, 30 Jun 2009 00:02:33 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.0.94 (gnu/linux) |
>>>>> "jidanni" == jidanni <jidanni@jidanni.org> writes:
> severity: wishlist
> I was thinking when M-x man prompts
> Manual entry (default Neurdsburg):
> wouldn't it be neat if there was completion, just like for
> M-! shell-command...
I use the patch below. It's very lightly tested.
Stefan
=== modified file 'lisp/man.el'
--- lisp/man.el 2009-03-07 20:30:47 +0000
+++ lisp/man.el 2009-03-14 03:18:28 +0000
@@ -749,6 +749,22 @@
;;;###autoload
(defalias 'manual-entry 'man)
+(defun Man-completion-table (string pred action)
+ (let ((table '()))
+ (with-temp-buffer
+ ;; Actually for my `man' the arg is a regexp. Don't know how
+ ;; standard that is. Also, it's not clear what kind of
+ ;; regexp are accepted: under GNU/Linux it seems it's ERE-style,
+ ;; whereas under MacOSX it seems to be BRE-style and
+ ;; doesn't accept backslashes at all. Let's not bother to
+ ;; quote anything.
+ (call-process "man" nil '(t nil) nil "-k" (concat "^" string))
+ (goto-char (point-min))
+ (while (re-search-forward "^[^ \t\n]+" nil t)
+ (push (match-string 0) table)))
+ ;; The table may contain false positives since the match is made
+ ;; by "man -k" not just on the manpage's name.
+ (complete-with-action action table string pred)))
;;;###autoload
(defun man (man-args)
@@ -765,12 +781,13 @@
`Man-switches' variable, which see."
(interactive
(list (let* ((default-entry (Man-default-man-entry))
- (input (read-string
+ (input (completing-read
(format "Manual entry%s"
(if (string= default-entry "")
": "
(format " (default %s): " default-entry)))
- nil 'Man-topic-history default-entry)))
+ 'Man-completion-table
+ nil nil nil 'Man-topic-history default-entry)))
(if (string= input "")
(error "No man args given")
input))))