summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorShigeru Fukaya <shigeru.fukaya@gmail.com>2013-12-18 12:46:49 +0800
committerChong Yidong <cyd@gnu.org>2013-12-18 12:46:49 +0800
commitba874b6430893be55d48840a901aac4e64a4befc (patch)
treea8f4474807dde0a2984ae4c31fae7bb6690dd6ce /lisp
parent150622a1734d33e7d72f6161d645f38b88f4e839 (diff)
downloademacs-ba874b6430893be55d48840a901aac4e64a4befc.tar.gz
emacs-ba874b6430893be55d48840a901aac4e64a4befc.tar.bz2
emacs-ba874b6430893be55d48840a901aac4e64a4befc.zip
apropos.el (apropos-words-to-regexp): Fix algorithm.
* apropos.el (apropos-words-to-regexp): Fix algorithm. Fixes: debbugs:13946
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog4
-rw-r--r--lisp/apropos.el25
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 <shigeru.fukaya@gmail.com>
+
+ * apropos.el (apropos-words-to-regexp): Fix algorithm (Bug#13946).
+
2013-12-18 Glenn Morris <rgm@gnu.org>
* 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)