elisp: File Name Completion
24.8.6 File Name Completion
---------------------------
This section describes low-level subroutines for completing a file name.
For higher level functions, see Reading File Names.
-- Function: file-name-all-completions partial-filename directory
This function returns a list of all possible completions for a file
whose name starts with PARTIAL-FILENAME in directory DIRECTORY.
The order of the completions is the order of the files in the
directory, which is unpredictable and conveys no useful
information.
The argument PARTIAL-FILENAME must be a file name containing no
directory part and no slash (or backslash on some systems). The
current buffer’s default directory is prepended to DIRECTORY, if
DIRECTORY is not absolute.
In the following example, suppose that ‘~rms/lewis’ is the current
default directory, and has five files whose names begin with ‘f’:
‘foo’, ‘file~’, ‘file.c’, ‘file.c.~1~’, and ‘file.c.~2~’.
(file-name-all-completions "f" "")
⇒ ("foo" "file~" "file.c.~2~"
"file.c.~1~" "file.c")
(file-name-all-completions "fo" "")
⇒ ("foo")
-- Function: file-name-completion filename directory &optional
predicate
This function completes the file name FILENAME in directory
DIRECTORY. It returns the longest prefix common to all file names
in directory DIRECTORY that start with FILENAME. If PREDICATE is
non-‘nil’ then it ignores possible completions that don’t satisfy
PREDICATE, after calling that function with one argument, the
expanded absolute file name.
If only one match exists and FILENAME matches it exactly, the
function returns ‘t’. The function returns ‘nil’ if directory
DIRECTORY contains no name starting with FILENAME.
In the following example, suppose that the current default
directory has five files whose names begin with ‘f’: ‘foo’,
‘file~’, ‘file.c’, ‘file.c.~1~’, and ‘file.c.~2~’.
(file-name-completion "fi" "")
⇒ "file"
(file-name-completion "file.c.~1" "")
⇒ "file.c.~1~"
(file-name-completion "file.c.~1~" "")
⇒ t
(file-name-completion "file.c.~3" "")
⇒ nil
-- User Option: completion-ignored-extensions
‘file-name-completion’ usually ignores file names that end in any
string in this list. It does not ignore them when all the possible
completions end in one of these suffixes. This variable has no
effect on ‘file-name-all-completions’.
A typical value might look like this:
completion-ignored-extensions
⇒ (".o" ".elc" "~" ".dvi")
If an element of ‘completion-ignored-extensions’ ends in a slash
‘/’, it signals a directory. The elements which do _not_ end in a
slash will never match a directory; thus, the above value will not
filter out a directory named ‘foo.elc’.