From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stephen Berman Newsgroups: gmane.emacs.bugs Subject: bug#10907: 24.0.94; Updating display of Customize buffer Date: Sat, 03 Mar 2012 18:03:50 +0100 Message-ID: <87r4x9ehvt.fsf@escher.home> References: <87vcmr6r9a.fsf@escher.home> <87obsj6l48.fsf@escher.home> <87k4367spn.fsf@escher.home> <87fwdu7qqb.fsf@escher.home> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: dough.gmane.org 1330794323 27254 80.91.229.3 (3 Mar 2012 17:05:23 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sat, 3 Mar 2012 17:05:23 +0000 (UTC) Cc: 10907@debbugs.gnu.org, Andreas Schwab To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Mar 03 18:05:21 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1S3sOW-0002v4-Tm for geb-bug-gnu-emacs@m.gmane.org; Sat, 03 Mar 2012 18:05:21 +0100 Original-Received: from localhost ([::1]:53866 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S3sOW-0003vw-4C for geb-bug-gnu-emacs@m.gmane.org; Sat, 03 Mar 2012 12:05:20 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:49740) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S3sO9-0003p1-SU for bug-gnu-emacs@gnu.org; Sat, 03 Mar 2012 12:05:17 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S3sO7-0002UW-OW for bug-gnu-emacs@gnu.org; Sat, 03 Mar 2012 12:04:57 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:53363) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S3sO7-0002US-Kk for bug-gnu-emacs@gnu.org; Sat, 03 Mar 2012 12:04:55 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1S3sOE-0002HV-50 for bug-gnu-emacs@gnu.org; Sat, 03 Mar 2012 12:05:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Stephen Berman Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 03 Mar 2012 17:05:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 10907 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 10907-submit@debbugs.gnu.org id=B10907.13307942848744 (code B ref 10907); Sat, 03 Mar 2012 17:05:02 +0000 Original-Received: (at 10907) by debbugs.gnu.org; 3 Mar 2012 17:04:44 +0000 Original-Received: from localhost ([127.0.0.1]:60195 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1S3sNw-0002Gp-7o for submit@debbugs.gnu.org; Sat, 03 Mar 2012 12:04:44 -0500 Original-Received: from mailout-de.gmx.net ([213.165.64.23]:36258) by debbugs.gnu.org with smtp (Exim 4.72) (envelope-from ) id 1S3sNi-0002GQ-Nu for 10907@debbugs.gnu.org; Sat, 03 Mar 2012 12:04:33 -0500 Original-Received: (qmail invoked by alias); 03 Mar 2012 17:03:52 -0000 Original-Received: from i59F5683C.versanet.de (EHLO escher.home) [89.245.104.60] by mail.gmx.net (mp041) with SMTP; 03 Mar 2012 18:03:52 +0100 X-Authenticated: #20778731 X-Provags-ID: V01U2FsdGVkX19MPbReNx1MvWPJ+wrCecEoLn3jIAxL8imBQ5j/lS C2h0TxOOiMjvSG In-Reply-To: (Stefan Monnier's message of "Tue, 28 Feb 2012 21:06:59 -0500") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.94 (gnu/linux) X-Y-GMX-Trusted: 0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:57461 Archived-At: --=-=-= Content-Type: text/plain On Tue, 28 Feb 2012 21:06:59 -0500 Stefan Monnier wrote: >> Ah, thanks. I feared as much. Is there really no way to reevaluate a >> defcustom in a running Emacs? > > Agreed that there should be some way to have a defcustom type that is > a bit more dynamic: no need to completely reevaluate the whole > expression, but being able to have a dynamic set of `choice's would > be helpful. It turns out that, at least for my use case, completely reevaluating the whole expression in fact DTRT -- see the attached file. Admittedly, elegant it isn't, and AFAIK this is virtually never done (I guess that's why it didn't occur to me when I asked the above question) -- but other than inelegance, is there a problem with doing this? Steve Berman --=-=-= Content-Type: text/x-emacs-lisp Content-Disposition: attachment; filename=srb.el Content-Description: test updating defcustom (defgroup srb nil "srb group.") (defcustom srb-dir "~/srb/" "Directory of files whose names are members of `srb-file-list'." :type 'directory :group 'srb) (defvar srb-file-list (if (file-exists-p srb-dir) (directory-files srb-dir nil "^[^.]+")) ; Don't include "." or ".." "List of names of files in `srb-dir'.") (defcustom srb-selected-file (car srb-file-list) "A selected file name from `srb-file-list'." :type `(radio ,@(mapcar (lambda (x) (list 'const x)) srb-file-list)) :group 'srb) (defun srb-reevaluate-defcustom () "Reevaluate defcustom `srb-selected-file'." (eval (defcustom srb-selected-file (car srb-file-list) "A selected file name from `srb-file-list'." :type `(radio ,@(mapcar (lambda (x) (list 'const x)) srb-file-list)) :group 'srb))) (defun srb-add-file () "Add a file to `srb-dir' and update variables." (interactive) (unless (file-exists-p srb-dir) (make-directory srb-dir)) (let ((file (read-from-minibuffer "Enter a file name: "))) (with-current-buffer (get-buffer-create file) (erase-buffer) (write-region (point-min) (point-max) (concat srb-dir file) nil 'nomessage nil t) (kill-buffer file))) (setq srb-file-list (directory-files srb-dir nil "^[^.]+")) (custom-set-default 'srb-selected-file (symbol-value 'srb-selected-file)) (srb-reevaluate-defcustom)) (defun srb-delete-file () "Delete a file from `srb-dir' and update variables." (interactive) (let ((files (directory-files srb-dir nil "^[^.]+"))) (if (and (file-exists-p srb-dir) (> (length files) 0)) (let ((file (completing-read "Enter a file name: " files nil t))) (when (yes-or-no-p (format "Confirm you want to delete file %s " file)) (delete-file (concat srb-dir file)) (setq srb-file-list (directory-files srb-dir nil "^[^.]+")) (custom-set-default 'srb-selected-file (symbol-value 'srb-selected-file)) (srb-reevaluate-defcustom) (message "File %s deleted" file))) (error "There are no files to delete")))) (provide 'srb) --=-=-=--