Allow loading modules by 'load-file'
* src/lread.c (Fload): Call 'unbind_to' with 'Fmodule_load' as the 2nd arg, to avoid the "binding stack not balanced" error. (syms_of_lread) <module-file-suffix>: New Lisp variable. * lisp/files.el (module-file-suffix): Declare. (load-file): Remove 'module-file-suffix' from 'completion-ignored-extensions', to allow completion on modules. * etc/NEWS: Mention 'module-file-suffix'.
This commit is contained in:
parent
9f0d19f24c
commit
40ed767ba0
3 changed files with 19 additions and 5 deletions
7
etc/NEWS
7
etc/NEWS
|
@ -308,8 +308,11 @@ few or no entries have changed.
|
|||
** Emacs can now load shared/dynamic libraries (modules).
|
||||
A dynamic Emacs module is a shared library that provides additional
|
||||
functionality for use in Emacs Lisp programs, just like a package
|
||||
written in Emacs Lisp would. The functions `load' and `require' were
|
||||
extended to load such modules, as they do with Emacs Lisp packages.
|
||||
written in Emacs Lisp would. The functions `load', `require',
|
||||
`load-file', etc. were extended to load such modules, as they do with
|
||||
Emacs Lisp packages. The new variable `module-file-suffix' holds the
|
||||
system-dependent value of the file-name extension (`.so' on Posix
|
||||
hosts) of the module files.
|
||||
|
||||
A module should export a C-callable function named
|
||||
`emacs_module_init', which Emacs will call as part of the call to
|
||||
|
|
|
@ -772,11 +772,15 @@ If INCLUDE-DIRECTORIES, also include directories that have matching names."
|
|||
(push (expand-file-name file dir) files)))))
|
||||
(nconc result (nreverse files))))
|
||||
|
||||
(defvar module-file-suffix)
|
||||
|
||||
(defun load-file (file)
|
||||
"Load the Lisp file named FILE."
|
||||
;; This is a case where .elc makes a lot of sense.
|
||||
;; This is a case where .elc and .so/.dll make a lot of sense.
|
||||
(interactive (list (let ((completion-ignored-extensions
|
||||
(remove ".elc" completion-ignored-extensions)))
|
||||
(remove module-file-suffix
|
||||
(remove ".elc"
|
||||
completion-ignored-extensions))))
|
||||
(read-file-name "Load file: " nil nil 'lambda))))
|
||||
(load (expand-file-name file) nil nil t))
|
||||
|
||||
|
|
|
@ -1164,7 +1164,7 @@ Return t if the file exists and loads successfully. */)
|
|||
|
||||
#ifdef HAVE_MODULES
|
||||
if (suffix_p (found, MODULES_SUFFIX))
|
||||
return Fmodule_load (found);
|
||||
return unbind_to (count, Fmodule_load (found));
|
||||
#endif
|
||||
|
||||
/* Check if we're stuck in a recursive load cycle.
|
||||
|
@ -4512,6 +4512,13 @@ to the specified file name if a suffix is allowed or required. */);
|
|||
#else
|
||||
Vload_suffixes = list2 (build_pure_c_string (".elc"),
|
||||
build_pure_c_string (".el"));
|
||||
#endif
|
||||
DEFVAR_LISP ("module-file-suffix", Vmodule_file_suffix,
|
||||
doc: /* Suffix of loadable module file, or nil of modules are not supported. */);
|
||||
#ifdef HAVE_MODULES
|
||||
Vmodule_file_suffix = build_pure_c_string (MODULES_SUFFIX);
|
||||
#else
|
||||
Vmodule_file_suffix = Qnil;
|
||||
#endif
|
||||
DEFVAR_LISP ("load-file-rep-suffixes", Vload_file_rep_suffixes,
|
||||
doc: /* List of suffixes that indicate representations of \
|
||||
|
|
Loading…
Add table
Reference in a new issue