summaryrefslogtreecommitdiff
path: root/lisp/info.el
diff options
context:
space:
mode:
authorKarl Heuer <kwzh@gnu.org>1996-12-05 19:53:00 +0000
committerKarl Heuer <kwzh@gnu.org>1996-12-05 19:53:00 +0000
commitec6d29af5e52b4e0b1c4962cd77685a78c26e84f (patch)
tree50aaab116e81fcf39599962ea5ba3b67fb73da71 /lisp/info.el
parentfc21ed035b436427dff35a6b3417eaf7842d0cb2 (diff)
downloademacs-ec6d29af5e52b4e0b1c4962cd77685a78c26e84f.tar.gz
(Info-follow-reference): Add each cross-reference to
completions list just once, case-insensitively.
Diffstat (limited to 'lisp/info.el')
-rw-r--r--lisp/info.el15
1 files changed, 12 insertions, 3 deletions
diff --git a/lisp/info.el b/lisp/info.el
index 9e001469073..c3df1a843be 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -894,9 +894,18 @@ NAME may be an abbreviation of the reference name."
;; Record as a completion and perhaps as default.
(if (eq default t) (setq default str))
(if (eq alt-default t) (setq alt-default str))
- (setq completions
- (cons (cons str nil)
- completions))))
+ ;; Don't add this string if it's a duplicate.
+ ;; We use a loop instead of "(assoc str completions)" because
+ ;; we want to do a case-insensitive compare.
+ (let ((tail completions)
+ (tem (downcase str)))
+ (while (and tail
+ (not (string-equal tem (downcase (car (car tail))))))
+ (setq tail (cdr tail)))
+ (or tail
+ (setq completions
+ (cons (cons str nil)
+ completions))))))
;; If no good default was found, try an alternate.
(or default
(setq default alt-default))