[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: autoload and auto-compression-mode
From: |
Luc Teirlinck |
Subject: |
Re: autoload and auto-compression-mode |
Date: |
Mon, 20 Feb 2006 23:28:22 -0600 (CST) |
Since other people showed interest in this I CC my new patch to
lread.c which I already sent in (mistakenly) private email to Richard
to emacs-pretest-bug. The changes to the previous patch are mostly in
the docstrings. I substantialy shortened the docstrings of
`load-suffixes' and the still to be renamed `load-file-rep-suffixes'
(I did not rename it yet, as the name is a separate problem) and put
most of the new info in the `load' docstring. I also suggested the
expanded name `load-file-representation-suffixes' for the present
file-rep-suffixes.
===File ~/lread.c-diff-b====================================
Index: lread.c
===================================================================
RCS file: /sources/emacs/emacs/src/lread.c,v
retrieving revision 1.349
diff -c -r1.349 lread.c
*** lread.c 6 Feb 2006 15:23:21 -0000 1.349
--- lread.c 21 Feb 2006 04:21:24 -0000
***************
*** 98,104 ****
Lisp_Object Vsource_directory;
/* Search path and suffixes for files to be loaded. */
! Lisp_Object Vload_path, Vload_suffixes, default_suffixes;
/* File name of user's init file. */
Lisp_Object Vuser_init_file;
--- 98,104 ----
Lisp_Object Vsource_directory;
/* Search path and suffixes for files to be loaded. */
! Lisp_Object Vload_path, Vload_suffixes, Vload_file_rep_suffixes;
/* File name of user's init file. */
Lisp_Object Vuser_init_file;
***************
*** 653,663 ****
return Qnil;
}
DEFUN ("load", Fload, Sload, 1, 5, 0,
doc: /* Execute a file of Lisp code named FILE.
First try FILE with `.elc' appended, then try with `.el',
then try FILE unmodified (the exact suffixes are determined by
! `load-suffixes'). Environment variable references in FILE
are replaced with their values by calling `substitute-in-file-name'.
This function searches the directories in `load-path'.
If optional second arg NOERROR is non-nil,
--- 653,685 ----
return Qnil;
}
+ DEFUN ("get-load-suffixes", Fget_load_suffixes, Sget_load_suffixes, 0, 0, 0,
+ doc: /* Return the suffixes that `load' should try if a suffix is \
+ required.
+ This uses the variables `load-suffixes' and `load-file-rep-suffixes'. */)
+ ()
+ {
+ Lisp_Object lst = Qnil, suffixes = Vload_suffixes, suffix, ext;
+ while (CONSP (suffixes))
+ {
+ Lisp_Object exts = Vload_file_rep_suffixes;
+ suffix = XCAR (suffixes);
+ suffixes = XCDR (suffixes);
+ while (CONSP (exts))
+ {
+ ext = XCAR (exts);
+ exts = XCDR (exts);
+ lst = Fcons (concat2 (suffix, ext), lst);
+ }
+ }
+ return Fnreverse (lst);
+ }
+
DEFUN ("load", Fload, Sload, 1, 5, 0,
doc: /* Execute a file of Lisp code named FILE.
First try FILE with `.elc' appended, then try with `.el',
then try FILE unmodified (the exact suffixes are determined by
! `load-suffixes'). Environment variable references in FILE
are replaced with their values by calling `substitute-in-file-name'.
This function searches the directories in `load-path'.
If optional second arg NOERROR is non-nil,
***************
*** 669,674 ****
--- 691,708 ----
If optional fifth arg MUST-SUFFIX is non-nil, insist on
the suffix `.elc' or `.el'; don't accept just FILE unless
it ends in one of those suffixes or includes a directory name.
+ If this function fails to find a file, it may look for different
+ representations of that file before trying another file.
+ It does so by adding the non-empty suffixes in `load-file-rep-suffixes'
+ to the file name. Emacs uses this feature mainly to find compressed
+ versions of files when Auto Compression mode is enabled.
+
+ The exact suffixes that this function tries out, in the exact order,
+ are given by the value of the variable `load-file-rep-suffixes' if
+ NOSUFFIX is non-nil and by the return value of the function
+ `get-load-suffixes' if MUST-SUFFIX is non-nil. If both NOSUFFIX and
+ MUST-SUFFIX are nil, this function first tries out the latter suffixes
+ and then the former..
Loading a file records its definitions, and its `provide' and
`require' calls, in an element of `load-history' whose
***************
*** 749,757 ****
fd = openp (Vload_path, file,
(!NILP (nosuffix) ? Qnil
! : !NILP (must_suffix) ? Vload_suffixes
! : Fappend (2, (tmp[0] = Vload_suffixes,
! tmp[1] = default_suffixes,
tmp))),
&found, Qnil);
UNGCPRO;
--- 783,791 ----
fd = openp (Vload_path, file,
(!NILP (nosuffix) ? Qnil
! : !NILP (must_suffix) ? Fget_load_suffixes ()
! : Fappend (2, (tmp[0] = Fget_load_suffixes (),
! tmp[1] = Vload_file_rep_suffixes,
tmp))),
&found, Qnil);
UNGCPRO;
***************
*** 1109,1115 ****
fn = (char *) alloca (fn_size = 100 + want_size);
/* Loop over suffixes. */
! for (tail = NILP (suffixes) ? default_suffixes : suffixes;
CONSP (tail); tail = XCDR (tail))
{
int lsuffix = SBYTES (XCAR (tail));
--- 1143,1149 ----
fn = (char *) alloca (fn_size = 100 + want_size);
/* Loop over suffixes. */
! for (tail = NILP (suffixes) ? Fcons (build_string (""), Qnil) :
suffixes;
CONSP (tail); tail = XCDR (tail))
{
int lsuffix = SBYTES (XCAR (tail));
***************
*** 3840,3845 ****
--- 3874,3880 ----
defsubr (&Sintern);
defsubr (&Sintern_soft);
defsubr (&Sunintern);
+ defsubr (&Sget_load_suffixes);
defsubr (&Sload);
defsubr (&Seval_buffer);
defsubr (&Seval_region);
***************
*** 3901,3913 ****
otherwise to default specified by file `epaths.h' when Emacs was built. */);
DEFVAR_LISP ("load-suffixes", &Vload_suffixes,
! doc: /* *List of suffixes to try for files to load.
! This list should not include the empty string. */);
Vload_suffixes = Fcons (build_string (".elc"),
Fcons (build_string (".el"), Qnil));
/* We don't use empty_string because it's not initialized yet. */
! default_suffixes = Fcons (build_string (""), Qnil);
! staticpro (&default_suffixes);
DEFVAR_BOOL ("load-in-progress", &load_in_progress,
doc: /* Non-nil iff inside of `load'. */);
--- 3936,3953 ----
otherwise to default specified by file `epaths.h' when Emacs was built. */);
DEFVAR_LISP ("load-suffixes", &Vload_suffixes,
! doc: /* List of suffixes for (compiled or source) Emacs Lisp
files.
! This should not include the empty string.
! `load' and related functions use this. */);
Vload_suffixes = Fcons (build_string (".elc"),
Fcons (build_string (".el"), Qnil));
+ DEFVAR_LISP ("load-file-rep-suffixes", &Vload_file_rep_suffixes,
+ doc: /* List of suffixes that indicate representations of \
+ the same file.
+ This list should normally start with the empty string.
+ `load' and related functions use this. */);
/* We don't use empty_string because it's not initialized yet. */
! Vload_file_rep_suffixes = Fcons (build_string (""), Qnil);
DEFVAR_BOOL ("load-in-progress", &load_in_progress,
doc: /* Non-nil iff inside of `load'. */);
============================================================