diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 0cf78ac1a0f..c7cb7d67ce4 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -1,6 +1,6 @@ ;;; cus-edit.el --- tools for customizing Emacs and Lisp packages ;; -;; Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1996,97,1999,2000,01,02,2003 Free Software Foundation, Inc. ;; ;; Author: Per Abrahamsen ;; Maintainer: FSF @@ -1189,7 +1189,8 @@ links: groups have links to subgroups." ;; If we pass BUFFER to `bury-buffer', the buffer isn't removed from ;; the window. (defun custom-bury-buffer (buffer) - (bury-buffer)) + (with-current-buffer buffer + (bury-buffer))) (defcustom custom-buffer-done-function 'custom-bury-buffer "*Function called to remove a Custom buffer when the user is done with it. @@ -1205,6 +1206,20 @@ Called with one argument, the buffer to remove." :type 'integer :group 'custom-buffer) +(defun custom-get-fresh-buffer (name) + "Get a fresh new buffer with name NAME. +If the buffer already exist, clean it up to be like new." + (let ((buf (get-buffer name))) + (if (null buf) + (get-buffer-create name) + (with-current-buffer buf + (kill-all-local-variables) + (erase-buffer) + (let ((ols (overlay-lists))) + (dolist (ol (nconc (car ols) (cdr ols))) + (delete-overlay ol))) + buf)))) + ;;;###autoload (defun custom-buffer-create (options &optional name description) "Create a buffer containing OPTIONS. @@ -1212,9 +1227,7 @@ Optional NAME is the name of the buffer. OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where SYMBOL is a customization option, and WIDGET is a widget for editing that option." - (unless name (setq name "*Customization*")) - (kill-buffer (get-buffer-create name)) - (pop-to-buffer (get-buffer-create name)) + (pop-to-buffer (custom-get-fresh-buffer (or name "*Customization*"))) (custom-buffer-create-internal options description)) ;;;###autoload @@ -1225,14 +1238,13 @@ OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where SYMBOL is a customization option, and WIDGET is a widget for editing that option." (unless name (setq name "*Customization*")) - (kill-buffer (get-buffer-create name)) (let ((window (selected-window)) (pop-up-windows t) (special-display-buffer-names nil) (special-display-regexps nil) (same-window-buffer-names nil) (same-window-regexps nil)) - (pop-to-buffer (get-buffer-create name)) + (pop-to-buffer (custom-get-fresh-buffer name)) (custom-buffer-create-internal options description) (select-window window))) @@ -1392,8 +1404,7 @@ Un-customize all values in this buffer. They get their standard settings." (unless group (setq group 'emacs)) (let ((name "*Customize Browser*")) - (kill-buffer (get-buffer-create name)) - (pop-to-buffer (get-buffer-create name))) + (pop-to-buffer (custom-get-fresh-buffer name))) (custom-mode) (widget-insert "\ Square brackets show active fields; type RET or click mouse-1 @@ -2440,7 +2451,6 @@ The value that was current before this operation becomes the backup value, so you can get it again." (let* ((symbol (widget-value widget)) (set (or (get symbol 'custom-set) 'set-default)) - (comment-widget (widget-get widget :comment-widget)) (value (get symbol 'saved-value)) (comment (get symbol 'saved-variable-comment))) (cond ((or value comment) @@ -2464,8 +2474,7 @@ restoring it to the state of a variable that has never been customized. The value that was current before this operation becomes the backup value, so you can get it again." (let* ((symbol (widget-value widget)) - (set (or (get symbol 'custom-set) 'set-default)) - (comment-widget (widget-get widget :comment-widget))) + (set (or (get symbol 'custom-set) 'set-default))) (if (get symbol 'standard-value) (progn (custom-variable-backup-value widget) @@ -2586,7 +2595,6 @@ Also change :reverse-video to :inverse-video." (unless (widget-get widget :inactive) (let ((tag (custom-face-edit-attribute-tag widget)) (from (copy-marker (widget-get widget :from))) - (to (widget-get widget :to)) (value (widget-value widget)) (inhibit-read-only t) (inhibit-modification-hooks t)) @@ -3727,8 +3735,7 @@ or (if there were none) at the end of the buffer." (and (not (boundp symbol)) (not (eq (get symbol 'force-value) 'rogue)))))) - (comment (get symbol 'saved-variable-comment)) - sep) + (comment (get symbol 'saved-variable-comment))) ;; Check `requests'. (dolist (request requests) (when (and (symbolp request) (not (featurep request)))