emacs-pretest-bug
[Top][All Lists]
Advanced

[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'.  */);
============================================================




reply via email to

[Prev in Thread] Current Thread [Next in Thread]