emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Customizable modes and package.el


From: Stefan Monnier
Subject: Re: Customizable modes and package.el
Date: Sun, 29 Mar 2015 20:41:50 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux)

> The only thing I'm totally sure on is the `now' parameter. I think
> it's not a problem, because it's meant to indicate "set the value
> wihout waiting for the defcustom" and not "set the value immediately",
> but I don't know its real use-case, so it's hard to say for sure.

Hmm... I thought the idea was to add "(package-initialize)" to the
~/.emacs


        Stefan


> diff --git a/lisp/custom.el b/lisp/custom.el
> index e5fe0eb..d07f0c0 100644
> --- a/lisp/custom.el
> +++ b/lisp/custom.el
> @@ -933,6 +933,37 @@ handle SYMBOL properly.
>  COMMENT is a comment string about SYMBOL."
>    (apply 'custom-theme-set-variables 'user args))

> +(defun custom--load-entry (entry &optional requests)
> +  "Load custom ENTRY, after requiring all features in REQUESTS.
> +Signal a meaningful error if any of the features are absent."
> +  ;; Now set the variable.
> +  (let* ((now (nth 2 entry))
> +         (comment (nth 4 entry))
> +         (symbol (indirect-variable (nth 0 entry)))
> +         (value (nth 1 entry))
> +         set)
> +    (dolist (f requests)
> +      (unless (require f nil t)
> +        (error "Cannot find load file `%s', required by `%s' inside your 
> `%s'"
> +               f symbol 'custom-set-variables)))
> +    (setq set (or (get symbol 'custom-set) 'custom-set-default))
> +    (put symbol 'saved-value (list value))
> +    (put symbol 'saved-variable-comment comment)
> +    ;; Allow for errors in the case where the setter has
> +    ;; changed between versions, say, but let the user know.
> +    (condition-case data
> +        (cond (now
> +               ;; Rogue variable, set it now.
> +               (put symbol 'force-value t)
> +               (funcall set symbol (eval value)))
> +              ((default-boundp symbol)
> +               ;; Something already set this, overwrite it.
> +               (funcall set symbol (eval value))))
> +      (error
> +          (message "Error setting %s: %s" symbol data)))
> +    (and (or now (default-boundp symbol))
> +         (put symbol 'variable-comment comment))))
> +
>  (defun custom-theme-set-variables (theme &rest args)
>    "Initialize variables for theme THEME according to settings in ARGS.
>  Each of the arguments in ARGS should be a list of this form:
> @@ -972,31 +1003,16 @@ COMMENT is a comment string about SYMBOL."
>         (value (nth 1 entry)))
>        (custom-push-theme 'theme-value symbol theme 'set value)
>        (unless custom--inhibit-theme-enable
> -    ;; Now set the variable.
> -    (let* ((now (nth 2 entry))
> -           (requests (nth 3 entry))
> -           (comment (nth 4 entry))
> -           set)
> -      (when requests
> -        (put symbol 'custom-requests requests)
> -        (mapc 'require requests))
> -      (setq set (or (get symbol 'custom-set) 'custom-set-default))
> -      (put symbol 'saved-value (list value))
> -      (put symbol 'saved-variable-comment comment)
> -      ;; Allow for errors in the case where the setter has
> -      ;; changed between versions, say, but let the user know.
> -      (condition-case data
> -          (cond (now
> -             ;; Rogue variable, set it now.
> -             (put symbol 'force-value t)
> -             (funcall set symbol (eval value)))
> -            ((default-boundp symbol)
> -             ;; Something already set this, overwrite it.
> -             (funcall set symbol (eval value))))
> -        (error
> -         (message "Error setting %s: %s" symbol data)))
> -      (and (or now (default-boundp symbol))
> -           (put symbol 'variable-comment comment)))))))
> +        (let* ((requests (nth 3 entry)))
> +          (when requests
> +            (put symbol 'custom-requests requests))
> +          ;; If a symbol has requirements, we don't even try to load
> +          ;; them now, because we might accidentally load an old
> +          ;; built-in instead of a newer installed version.
> +          (if requests
> +              (add-hook 'after-init-hook
> +                        (apply-partially #'custom--load-entry entry 
> requests))
> +            (custom--load-entry entry)))))))

>  (defvar custom--sort-vars-table)
>  (defvar custom--sort-vars-result)



reply via email to

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