|
From: | Lennart Borgman (gmail) |
Subject: | Re: Honoring traditional defaults [was: Transient Mark Mode on by default] |
Date: | Tue, 25 Mar 2008 01:12:01 +0100 |
User-agent: | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071031 Thunderbird/2.0.0.9 Mnenhy/0.7.5.666 |
Stephen J. Turnbull wrote:
Then there would be a command `custom-set-all-to-prior-defaults' or so, which would get a version from the user, defaulting to the prior public release. Next, map over the alist of defaults accumulating the most recent default prior to the user-specified version, if any. Call this the "prior defaults alist". Now the command maps over the prior defaults alist. If a variable appears as a key in the prior defaults alist, and the user has a customization, we ignore it, and continue with the next variable. If the user has no customization for the variable, then we create one, setting the user's customization to the prior default. Finally, it emits a warning telling the user which variables it customized. If desired, there could also be a customizable variable for determining how far back to turn the clock, something like `emacs-version-for-prior-defaults'. Presumably Alan would set this to "18.59" or so<wink>. This would be used instead of the "most recent public release" as the default for `custom-set-all-to-prior-defaults'. IMO this handles changes in defaults with a minimum of annoyance to those with a classical education while making it possible to change defaults to something more friendly to the GUI generation. To be honest, I'm not interested in implementing this scheme at this time, but if and when I get around to it, I'll post here. If somebody decides to grab the ball and run with it, I'd appreciate the courtesy of an email, though.
I think implementing the scheme is easy. I have attached a starter.
;;; custsets.el --- Sets of named customizations ;; ;; Author: Lennart Borgman (lennart O borgman A gmail O com) ;; Created: 2008-03-25T00:17:06+0100 Mon ;; Version: ;; Last-Updated: ;; URL: ;; Keywords: ;; Compatibility: ;; ;; Features that might be required by this library: ;; ;; None ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Commentary: ;; ;; After an idea expressed by among other Stephen Turnbull on the ;; emacs devel list. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Change log: ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 2, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth ;; Floor, Boston, MA 02110-1301, USA. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Code: (defcustom custsets-sets '( ("Windows" (cua-mode t) ) ) "Sets of customizations." :group 'custsets) (defun custsets-turn-on (set-name) (interactive "sCustomization set: ") (let ((set (assoc-string set-name custsets-sets t))) (unless set (error "Can't find customization set %s" set-name)) (dolist (opt-rec (cdr set)) (let* ((opt (car opt-rec)) (val (cdr opt-rec)) (saved-opt (get opt 'saved-value)) (saved-val saved-opt) ;; fix-me (ask (if saved-opt (format "You have currently customized %s to %s. Change this to %s? " opt saved-opt val) (format "Customize %s to %s? " opt val))) ) (when (y-or-n-p ask) (customize-set-variable opt val) (customize-set-value opt val) (customize-mark-to-save opt)) ) ) (custom-save-all))) (provide 'custsets) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; custsets.el ends here
[Prev in Thread] | Current Thread | [Next in Thread] |