Subject: RE: bug#19328: [PATCH] Add mechanism to prompt about unsaved customizations

From: Drew Adams <[email-masked]>
Date: Tue, 9 Dec 2014 09:46:30 -0800 (PST)

> Got it.  Thank you for the clarification, I think I see where our
> thinking has diverged: `customize-unsaved' is the existing mechanism
> to pop up a customize buffer displaying unsaved customization
> options. I've put a thin layer around this which provides a yes / no
> prompt to the user before (conditionally) invoking `customized-unsaved'.
> This is in the general spirit of hooks that run when killing Emacs
> ("Modified buffers exist", "Active processes exist", etc.).
> 
> > If you want a named function and no error handling, then, well,
> > try `customize-unsaved'.
> 
> `customize-unsaved' is not suitable for use in
> `kill-emacs-query-functions` because it signals an error if nothing
> has been customized, meaning that it will block the user from
> quitting Emacs if there are no unsaved customizations, and it will
> invoke the customization mechanism there are any.  Ergo, they can
> never quit. (Drew: I'm sure you're aware of this given the way you've
> wrapped the call to `customize-unsaved', but I'm spelling it out
> for the benefit of others.)
> 
> That said, the lambda you've added to `kill-emacs-query-functions'
> doesn't function properly either (at least not on my machine).  It
> returns `t' in the no-unsaved-customizations case (after catching
> the error thrown my `customize-unsaved'), and it returns a (truthy)
> string, courtesy of `customize-unsaved', in the
> have-unsaved-custoizations case.  Truthy values returned by the
> functions in `kill-emacs-query-functions' mean "continue with
> quitting Emacs", ergo the user is never prompted about unsaved
> customizations.
> 
> Of course you can fix this easily by making sure to return nil in
> the happy path, but you're working up to exactly what my patch does...
> 
> The one behavioral difference between the two is how we prompt: in
> the patched version the user is prompted in the minibuffer: "Some
> customized options have not been saved; Examine?", and shown a
> customization buffer only if they say yes.
> 
> In yours, the customization buffer is automatically shown, without
> explanation, and attempts to quit the editor will continue to fail
> until the user finds either the `Revert...` or the `Apply and Save`
> button.
> 
> I believe the patched version is a superior user experience.  Have I
> managed to convince you? :)

OK.  In fact, I use `cus-edit+.el', which redefines `customize-unsaved'
so that it DTRT.  I offered this to Emacs Dev long ago, but no interest.
Perhaps you will have better luck. ;-)

FWIW, These are the changes I made to `customize-unsaved':

;; 1. By default, ignores preferences in `customize-customized-ignore'.
;; 2. Added prefix arg to override `customize-customized-ignore'.
;; 3. When not interactive and there are changes, ask for confirmation.
;; 4. Always returns `t', so it can be used as a
;;    `kill-emacs-query-functions' hook.
;; 5. Wrap in `condition-case' and reissue error.

The code is here, in case you are interested:
http://www.emacswiki.org/emacs-en/download/cus-edit%2b.el

And here is some info about it:
http://www.emacswiki.org/CustomizingAndSaving#CustomizePlus

HTH.