From: Protesilaos Stavrou Date: Mon, 1 Mar 2021 15:31:44 +0000 (+0200) Subject: Add 'require-theme' function X-Git-Tag: emacs-28.0.90~3475 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=59e1867a1f2b6938cdabac8e3f52acc9e61e9e32;p=emacs.git Add 'require-theme' function * etc/NEWS: Document new function. * lisp/custom.el (require-theme): Add function. This follows from the discussion on bug#45068 where it became apparent that there was no equivalent mechanism to 'require' that read through the 'custom-theme-load-path'. --- diff --git a/etc/NEWS b/etc/NEWS index 3db276165f4..d01b532193d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2506,6 +2506,12 @@ region's (or buffer's) end. This function can be used by modes to add elements to the 'choice' customization type of a variable. +--- +** New function 'require-theme'. +This function is used to load a theme or library stored in the +'custom-theme-load-path'. It is intended to work as a substitute for +'require' in those cases where that cannot be used. + +++ ** New function 'file-modes-number-to-symbolic' to convert a numeric file mode specification into symbolic form. diff --git a/lisp/custom.el b/lisp/custom.el index 833810718b7..35ac4d8564a 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -1200,6 +1200,30 @@ property `theme-feature' (which is usually a symbol created by (custom-check-theme theme) (provide (get theme 'theme-feature))) +(defun require-theme (theme &optional path) + "Load THEME stored in `custom-theme-load-path'. + +THEME is a symbol that corresponds to the file name without its file +type extension. That is assumed to be either '.el' or '.elc'. + +When THEME is an element of `custom-available-themes', load it and ask +for confirmation if it is not considered safe by `custom-safe-themes'. +Otherwise load the file indicated by THEME, if present. In the latter +case, the file is intended to work as the basis of a theme declared +with `deftheme'. + +If optional PATH is non-nil, it should be a list of directories +to search for THEME in, instead of `custom-theme-load-path'. +PATH should have the same form as `load-path' or `exec-path'." + (cond + ((memq theme (custom-available-themes)) + (load-theme theme)) + ((let* ((dirs (or path (custom-theme--load-path))) + (file (unless (featurep theme) + (locate-file (symbol-name theme) dirs '(".el" ".elc"))))) + (when file + (load-file file)))))) + (defcustom custom-safe-themes '(default) "Themes that are considered safe to load. If the value is a list, each element should be either the SHA-256