summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorBasil L. Contovounesios <contovob@tcd.ie>2020-11-18 12:53:03 +0000
committerBasil L. Contovounesios <contovob@tcd.ie>2020-11-24 16:50:37 +0000
commitdea3d6aa18e54f0d8d75cd219b511bac5b3c87b1 (patch)
treef88602aab719cf200a3c265c3a893c415aa23c14 /lisp
parentb2ee6650243ed2777f3a6c400f194f770f00da6f (diff)
downloademacs-dea3d6aa18e54f0d8d75cd219b511bac5b3c87b1.tar.gz
Fix handling of defcustom :local tag
For discussion, see the following emacs-devel thread: https://lists.gnu.org/r/emacs-devel/2020-11/msg00734.html * lisp/custom.el (custom-declare-variable): Delay call to make-variable-buffer-local until after user option has been initialized with a value. Otherwise the user option may be initialized to nil. * test/lisp/custom-tests.el (custom--test-local-option) (custom--test-permanent-option): New :local user options. (custom-test-local-option): New test for defcustom :local keyword.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/custom.el10
1 files changed, 7 insertions, 3 deletions
diff --git a/lisp/custom.el b/lisp/custom.el
index 885c486c5e4..cdfd2212169 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -157,7 +157,9 @@ set to nil, as the value is no longer rogue."
(if (keywordp doc)
(error "Doc string is missing"))
(let ((initialize #'custom-initialize-reset)
- (requests nil))
+ (requests nil)
+ ;; Whether automatically buffer-local.
+ buffer-local)
(unless (memq :group args)
(custom-add-to-group (custom-current-group) symbol 'custom-variable))
(while args
@@ -183,7 +185,7 @@ set to nil, as the value is no longer rogue."
(put symbol 'safe-local-variable value))
((eq keyword :local)
(when (memq value '(t permanent))
- (make-variable-buffer-local symbol))
+ (setq buffer-local t))
(when (eq value 'permanent)
(put symbol 'permanent-local t)))
((eq keyword :type)
@@ -205,7 +207,9 @@ set to nil, as the value is no longer rogue."
(put symbol 'custom-requests requests)
;; Do the actual initialization.
(unless custom-dont-initialize
- (funcall initialize symbol default)))
+ (funcall initialize symbol default))
+ (when buffer-local
+ (make-variable-buffer-local symbol)))
(run-hooks 'custom-define-hook)
symbol)