From: Stefan Monnier Date: Sat, 16 Mar 2002 02:25:56 +0000 (+0000) Subject: (load-completion): New function. X-Git-Tag: ttn-vms-21-2-B4~16149 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2c3d8820e2dfc29d39e2f29e2d3567ddcd82d623;p=emacs.git (load-completion): New function. (load-library): Use it. --- diff --git a/lisp/files.el b/lisp/files.el index f02ce05cef2..ef44e44d84a 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -534,10 +534,29 @@ colon-separated list of directories when resolving a relative directory name." (read-file-name "Load file: ")))) (load (expand-file-name file) nil nil t)) +(defun load-completion (string predicate action) + (if (file-name-absolute-p string) + (read-file-name-internal string predicate action) + (let ((names nil) + (suffix (concat (regexp-opt load-suffixes t) "\\'")) + (string-dir (file-name-directory string))) + (dolist (dir load-path) + (if string-dir (setq dir (expand-file-name string-dir dir))) + (when (file-directory-p dir) + (dolist (file (file-name-all-completions + (file-name-nondirectory string) dir)) + (push (if string-dir (concat string-dir file) file) names) + (when (string-match suffix file) + (setq file (substring file 0 (match-beginning 0))) + (push (if string-dir (concat string-dir file) file) names))))) + (if action + (all-completions string (mapcar 'list names) predicate) + (try-completion string (mapcar 'list names) predicate))))) + (defun load-library (library) "Load the library named LIBRARY. This is an interface to the function `load'." - (interactive "sLoad library: ") + (interactive (list (completing-read "Load library: " 'load-completion))) (load library)) (defun file-local-copy (file)