aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/info.el45
1 files changed, 13 insertions, 32 deletions
diff --git a/lisp/info.el b/lisp/info.el
index 01596619476..44c4aabe172 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -1766,41 +1766,22 @@ directories to search if FILENAME is not absolute; SUFFIXES is a
1766list of valid filename suffixes for Info files. See 1766list of valid filename suffixes for Info files. See
1767`try-completion' for a description of the remaining arguments." 1767`try-completion' for a description of the remaining arguments."
1768 (setq suffixes (remove "" suffixes)) 1768 (setq suffixes (remove "" suffixes))
1769 (when (file-name-absolute-p string)
1770 (setq dirs (list (file-name-directory string))))
1771 (let ((names nil) 1769 (let ((names nil)
1772 (names-sans-suffix nil) 1770 (suffix (concat (regexp-opt suffixes t) "\\'")))
1773 (suffix (concat (regexp-opt suffixes t) "\\'"))
1774 (string-dir (file-name-directory string)))
1775 (dolist (dir dirs) 1771 (dolist (dir dirs)
1776 (unless dir
1777 (setq dir default-directory))
1778 (if string-dir (setq dir (expand-file-name string-dir dir)))
1779 (when (file-directory-p dir) 1772 (when (file-directory-p dir)
1780 (dolist (file (file-name-all-completions 1773 (dolist (file (directory-files dir))
1781 (file-name-nondirectory string) dir)) 1774 ;; If the file name has a standard suffix,
1782 ;; If the file name has no suffix or a standard suffix, 1775 ;; include it (without the suffix).
1783 ;; include it. 1776 (when (and (string-match suffix file)
1784 (and (or (null (file-name-extension file)) 1777 ;; But exclude subfiles of split Info files.
1785 (string-match suffix file)) 1778 (not (string-match "\.info-[0-9]+" file))
1786 ;; But exclude subfiles of split Info files. 1779 ;; And exclude backup files.
1787 (not (string-match "-[0-9]+\\'" file)) 1780 (not (string-match "~\\'" file)))
1788 ;; And exclude backup files. 1781 (push (substring file 0 (match-beginning 0))
1789 (not (string-match "~\\'" file)) 1782 names)))))
1790 (push (if string-dir (concat string-dir file) file) names)) 1783 (complete-with-action action (cl-delete-duplicates
1791 ;; If the file name ends in a standard suffix, 1784 (nreverse names) :test 'equal) string pred)))
1792 ;; add the unsuffixed name as a completion option.
1793 (when (string-match suffix file)
1794 (setq file (substring file 0 (match-beginning 0)))
1795 (push (if string-dir (concat string-dir file) file)
1796 names-sans-suffix)))))
1797 ;; If there is just one file, don't duplicate it with suffixes,
1798 ;; so `Info-read-node-name-1' will be able to complete a single
1799 ;; candidate and to add the terminating ")".
1800 (if (and (= (length names) 1) (= (length names-sans-suffix) 1))
1801 (setq names names-sans-suffix)
1802 (setq names (append names-sans-suffix names)))
1803 (complete-with-action action names string pred)))
1804 1785
1805(defun Info-read-node-name-1 (string predicate code) 1786(defun Info-read-node-name-1 (string predicate code)
1806 "Internal function used by `Info-read-node-name'. 1787 "Internal function used by `Info-read-node-name'.