Search code examples
emacscustomizationdot-emacs

What does "SAVED and set. (mismatch)" (and in particular the "mismatch" part) mean in emacs customize?


I was just trying to customize some org-mode export settings in emacs, and so I did M-xcustomize-grouporg-export-html. This brought up by Customize buffer, and, among other things, I went about changing the org-export-html-postamble-format to something more to my liking.

Possibly relevant: During this process, I'd used a few C-o's to open new lines, so the value would look nice to me on the screen, and I could tell what I was doing. When satisfied, I clicked on the State button, and chose Save for Future Sessions. Because (I presume) of the C-o newlines, it then said:

CHANGED outside Customize; operating on it here may be unreliable. (mismatch)

So, I then chose Reset to Saved, which got rid of that, but replaced it with this:

SAVED and set. (mismatch)

OK, so... all is well... except... In both of those lines, what does (mismatch) mean? That there's a mismatch between what's saved in my emacs init file and what I'm looking at? That there's a mismatch between... Well, looking around further, I even see some customize entries that say:

STANDARD. (mismatch)

Standard and mismatch? (There are others which just say STANDARD., by the way.)

I want to understand what "mismatch" means. Any hints?

Thanks!


Addenda:

I just went digging a little in cus-edit.el, and found this in the comments:

;; 8. mismatch

;;    The widget value is not valid member of the :type specified for the
;;    option.

This helps, a little... does it just mean that org-mode's type specifier is wrong? Looking at that (in org-html.el), it specifies :type 'string, but in reality it seems to be a plist (even its default value is of the form '(("en" "[data here]")).) Is this just bad cleanliness on the part of org-mode? But then, even another variable in here says "mismatch", but seems logically to have a value that makes sense. The value is t (and I checked in my emacs init, and it's just the symbol t, no quotes or anything), and the type specifier for that is:

:type '(choice (const :tag "No postamble" nil) (const :tag "Auto preamble" 'auto) (const :tag "Default formatting string" t) (string :tag "Custom formatting string") (function :tag "Function (must return a string)")))

... which would seem to match that third line. No? Is '(choice ... not a valid value for :type?


Solution

  • It looks like two bugs:

    • a trivial one in org-html.el which declares :type 'string for that variable, even though the variable's value is not a string.

    • a bug in customize which says "changed outside customize" in this mismatched case, even though the mismatch actually came straight from customize and not outside of it.

    Please report it with M-x report-emacs-bug.