From ba874b6430893be55d48840a901aac4e64a4befc Mon Sep 17 00:00:00 2001 From: Shigeru Fukaya Date: Wed, 18 Dec 2013 12:46:49 +0800 Subject: [PATCH] apropos.el (apropos-words-to-regexp): Fix algorithm. * apropos.el (apropos-words-to-regexp): Fix algorithm. Fixes: debbugs:13946 --- lisp/ChangeLog | 4 ++++ lisp/apropos.el | 25 +++++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 96410c6c929..fa79352e7a2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-12-18 Shigeru Fukaya + + * apropos.el (apropos-words-to-regexp): Fix algorithm (Bug#13946). + 2013-12-18 Glenn Morris * Makefile.in (BYTE_COMPILE_FLAGS): Set load-prefer-newer to t. diff --git a/lisp/apropos.el b/lisp/apropos.el index 7a1a6f6a75a..b7c5aaddcb1 100644 --- a/lisp/apropos.el +++ b/lisp/apropos.el @@ -341,16 +341,21 @@ before finding a label." (defun apropos-words-to-regexp (words wild) - "Make regexp matching any two of the words in WORDS." - (concat "\\(" - (mapconcat 'identity words "\\|") - "\\)" - (if (cdr words) - (concat wild - "\\(" - (mapconcat 'identity words "\\|") - "\\)") - ""))) + "Make regexp matching any two of the words in WORDS. +WILD should be a subexpression matching wildcards between matches." + (setq words (delete-dups (copy-sequence words))) + (if (null (cdr words)) + (car words) + (mapconcat + (lambda (w) + (concat "\\(?:" w "\\)" ;; parens for synonyms + wild "\\(?:" + (mapconcat 'identity + (delq w (copy-sequence words)) + "\\|") + "\\)")) + words + "\\|"))) ;;;###autoload (defun apropos-read-pattern (subject) -- 2.39.2