Browse Source

ox.el: Add :safe declarations to defcustoms

* lisp/ox.el: Add :safe declarations to defcustoms.
Aaron Ecay 9 years ago
parent
commit
95e2777663
1 changed files with 84 additions and 36 deletions
  1. 84 36
      lisp/ox.el

+ 84 - 36
lisp/ox.el

@@ -346,21 +346,24 @@ e.g. \"arch:nil\"."
   :type '(choice
   :type '(choice
 	  (const :tag "Not at all" nil)
 	  (const :tag "Not at all" nil)
 	  (const :tag "Headline only" headline)
 	  (const :tag "Headline only" headline)
-	  (const :tag "Entirely" t)))
+	  (const :tag "Entirely" t))
+  :safe (lambda (x) (memq x 't nil headline)))
 
 
 (defcustom org-export-with-author t
 (defcustom org-export-with-author t
   "Non-nil means insert author name into the exported file.
   "Non-nil means insert author name into the exported file.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"author:nil\"."
 e.g. \"author:nil\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-clocks nil
 (defcustom org-export-with-clocks nil
   "Non-nil means export CLOCK keywords.
   "Non-nil means export CLOCK keywords.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"c:t\"."
 e.g. \"c:t\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-creator nil
 (defcustom org-export-with-creator nil
   "Non-nil means the postamble should contain a creator sentence.
   "Non-nil means the postamble should contain a creator sentence.
@@ -373,14 +376,16 @@ This option can also be set with the OPTIONS keyword, e.g.,
   :group 'org-export-general
   :group 'org-export-general
   :version "25.1"
   :version "25.1"
   :package-version '(Org . "8.3")
   :package-version '(Org . "8.3")
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-date t
 (defcustom org-export-with-date t
   "Non-nil means insert date in the exported document.
   "Non-nil means insert date in the exported document.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"date:nil\"."
 e.g. \"date:nil\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-date-timestamp-format nil
 (defcustom org-export-date-timestamp-format nil
   "Time-stamp format string to use for DATE keyword.
   "Time-stamp format string to use for DATE keyword.
@@ -393,7 +398,8 @@ string."
   :group 'org-export-general
   :group 'org-export-general
   :type '(choice
   :type '(choice
 	  (string :tag "Time-stamp format string")
 	  (string :tag "Time-stamp format string")
-	  (const :tag "No format string" nil)))
+	  (const :tag "No format string" nil))
+  :safe (lambda (x) (or (null x) (stringp x))))
 
 
 (defcustom org-export-creator-string
 (defcustom org-export-creator-string
   (format "Emacs %s (Org mode %s)"
   (format "Emacs %s (Org mode %s)"
@@ -402,7 +408,8 @@ string."
   "Information about the creator of the document.
   "Information about the creator of the document.
 This option can also be set on with the CREATOR keyword."
 This option can also be set on with the CREATOR keyword."
   :group 'org-export-general
   :group 'org-export-general
-  :type '(string :tag "Creator string"))
+  :type '(string :tag "Creator string")
+  :safe #'stringp)
 
 
 (defcustom org-export-with-drawers '(not "LOGBOOK")
 (defcustom org-export-with-drawers '(not "LOGBOOK")
   "Non-nil means export contents of standard drawers.
   "Non-nil means export contents of standard drawers.
@@ -428,14 +435,20 @@ e.g. \"d:nil\"."
 		(const :format "" not)
 		(const :format "" not)
 		(repeat :tag "Specify names of drawers to ignore during export"
 		(repeat :tag "Specify names of drawers to ignore during export"
 			:inline t
 			:inline t
-			(string :tag "Drawer name")))))
+			(string :tag "Drawer name"))))
+  :safe (lambda (x) (or (booleanp x)
+			(and (listp x)
+			     (or (cl-every #'stringp x)
+				 (and (eq (nth 0 x) 'not)
+				      (cl-every #'stringp (cdr x))))))))
 
 
 (defcustom org-export-with-email nil
 (defcustom org-export-with-email nil
   "Non-nil means insert author email into the exported file.
   "Non-nil means insert author email into the exported file.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"email:t\"."
 e.g. \"email:t\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-emphasize t
 (defcustom org-export-with-emphasize t
   "Non-nil means interpret *word*, /word/, _word_ and +word+.
   "Non-nil means interpret *word*, /word/, _word_ and +word+.
@@ -447,7 +460,8 @@ respectively.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"*:nil\"."
 e.g. \"*:nil\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-exclude-tags '("noexport")
 (defcustom org-export-exclude-tags '("noexport")
   "Tags that exclude a tree from export.
   "Tags that exclude a tree from export.
@@ -458,7 +472,8 @@ carry one of the `org-export-select-tags' will be removed.
 
 
 This option can also be set with the EXCLUDE_TAGS keyword."
 This option can also be set with the EXCLUDE_TAGS keyword."
   :group 'org-export-general
   :group 'org-export-general
-  :type '(repeat (string :tag "Tag")))
+  :type '(repeat (string :tag "Tag"))
+  :safe (lambda (x) (and (listp x) (cl-every #'stringp x))))
 
 
 (defcustom org-export-with-fixed-width t
 (defcustom org-export-with-fixed-width t
   "Non-nil means export lines starting with \":\".
   "Non-nil means export lines starting with \":\".
@@ -467,14 +482,16 @@ e.g. \"::nil\"."
   :group 'org-export-general
   :group 'org-export-general
   :version "24.4"
   :version "24.4"
   :package-version '(Org . "8.0")
   :package-version '(Org . "8.0")
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-footnotes t
 (defcustom org-export-with-footnotes t
   "Non-nil means Org footnotes should be exported.
   "Non-nil means Org footnotes should be exported.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"f:nil\"."
 e.g. \"f:nil\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-latex t
 (defcustom org-export-with-latex t
   "Non-nil means process LaTeX environments and fragments.
   "Non-nil means process LaTeX environments and fragments.
@@ -491,7 +508,8 @@ t           Allow export of math snippets."
   :type '(choice
   :type '(choice
 	  (const :tag "Do not process math in any way" nil)
 	  (const :tag "Do not process math in any way" nil)
 	  (const :tag "Interpret math snippets" t)
 	  (const :tag "Interpret math snippets" t)
-	  (const :tag "Leave math verbatim" verbatim)))
+	  (const :tag "Leave math verbatim" verbatim))
+  :safe (lambda (x) (memq x '(t nil verbatim))))
 
 
 (defcustom org-export-headline-levels 3
 (defcustom org-export-headline-levels 3
   "The last level which is still exported as a headline.
   "The last level which is still exported as a headline.
@@ -502,7 +520,8 @@ when exported, but back-end behavior may differ.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"H:2\"."
 e.g. \"H:2\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'integer)
+  :type 'integer
+  :safe #'integerp)
 
 
 (defcustom org-export-default-language "en"
 (defcustom org-export-default-language "en"
   "The default language for export and clocktable translations, as a string.
   "The default language for export and clocktable translations, as a string.
@@ -511,14 +530,16 @@ This may have an association in
 `org-export-smart-quotes-alist' and `org-export-dictionary'.
 `org-export-smart-quotes-alist' and `org-export-dictionary'.
 This option can also be set with the LANGUAGE keyword."
 This option can also be set with the LANGUAGE keyword."
   :group 'org-export-general
   :group 'org-export-general
-  :type '(string :tag "Language"))
+  :type '(string :tag "Language")
+  :safe #'stringp)
 
 
 (defcustom org-export-preserve-breaks nil
 (defcustom org-export-preserve-breaks nil
   "Non-nil means preserve all line breaks when exporting.
   "Non-nil means preserve all line breaks when exporting.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"\\n:t\"."
 e.g. \"\\n:t\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-entities t
 (defcustom org-export-with-entities t
   "Non-nil means interpret entities when exporting.
   "Non-nil means interpret entities when exporting.
@@ -532,7 +553,8 @@ and the user option `org-entities-user'.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"e:nil\"."
 e.g. \"e:nil\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-inlinetasks t
 (defcustom org-export-with-inlinetasks t
   "Non-nil means inlinetasks should be exported.
   "Non-nil means inlinetasks should be exported.
@@ -541,7 +563,8 @@ e.g. \"inline:nil\"."
   :group 'org-export-general
   :group 'org-export-general
   :version "24.4"
   :version "24.4"
   :package-version '(Org . "8.0")
   :package-version '(Org . "8.0")
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-planning nil
 (defcustom org-export-with-planning nil
   "Non-nil means include planning info in export.
   "Non-nil means include planning info in export.
@@ -554,14 +577,16 @@ e.g. \"p:t\"."
   :group 'org-export-general
   :group 'org-export-general
   :version "24.4"
   :version "24.4"
   :package-version '(Org . "8.0")
   :package-version '(Org . "8.0")
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-priority nil
 (defcustom org-export-with-priority nil
   "Non-nil means include priority cookies in export.
   "Non-nil means include priority cookies in export.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"pri:t\"."
 e.g. \"pri:t\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-properties nil
 (defcustom org-export-with-properties nil
   "Non-nil means export contents of properties drawers.
   "Non-nil means export contents of properties drawers.
@@ -578,7 +603,9 @@ e.g. \"prop:t\"."
 	  (const :tag "All properties" t)
 	  (const :tag "All properties" t)
 	  (const :tag "None" nil)
 	  (const :tag "None" nil)
 	  (repeat :tag "Selected properties"
 	  (repeat :tag "Selected properties"
-		  (string :tag "Property name"))))
+		  (string :tag "Property name")))
+  :safe (lambda (x) (or (booleanp x)
+			(and (listp x) (cl-every #'stringp x)))))
 
 
 (defcustom org-export-with-section-numbers t
 (defcustom org-export-with-section-numbers t
   "Non-nil means add section numbers to headlines when exporting.
   "Non-nil means add section numbers to headlines when exporting.
@@ -589,7 +616,8 @@ headlines whose relative level is higher or equal to n.
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"num:t\"."
 e.g. \"num:t\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-select-tags '("export")
 (defcustom org-export-select-tags '("export")
   "Tags that select a tree for export.
   "Tags that select a tree for export.
@@ -601,7 +629,8 @@ tagging it with one of the `org-export-exclude-tags'.
 
 
 This option can also be set with the SELECT_TAGS keyword."
 This option can also be set with the SELECT_TAGS keyword."
   :group 'org-export-general
   :group 'org-export-general
-  :type '(repeat (string :tag "Tag")))
+  :type '(repeat (string :tag "Tag"))
+  :safe (lambda (x) (and (listp x) (cl-every #'stringp x))))
 
 
 (defcustom org-export-with-smart-quotes nil
 (defcustom org-export-with-smart-quotes nil
   "Non-nil means activate smart quotes during export.
   "Non-nil means activate smart quotes during export.
@@ -616,7 +645,8 @@ E.g., you can load Babel for french like this:
   :group 'org-export-general
   :group 'org-export-general
   :version "24.4"
   :version "24.4"
   :package-version '(Org . "8.0")
   :package-version '(Org . "8.0")
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-special-strings t
 (defcustom org-export-with-special-strings t
   "Non-nil means interpret \"\\-\", \"--\" and \"---\" for export.
   "Non-nil means interpret \"\\-\", \"--\" and \"---\" for export.
@@ -633,7 +663,8 @@ When this option is turned on, these strings will be exported as:
 This option can also be set with the OPTIONS keyword,
 This option can also be set with the OPTIONS keyword,
 e.g. \"-:nil\"."
 e.g. \"-:nil\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-statistics-cookies t
 (defcustom org-export-with-statistics-cookies t
   "Non-nil means include statistics cookies in export.
   "Non-nil means include statistics cookies in export.
@@ -642,7 +673,8 @@ e.g. \"stat:nil\""
   :group 'org-export-general
   :group 'org-export-general
   :version "24.4"
   :version "24.4"
   :package-version '(Org . "8.0")
   :package-version '(Org . "8.0")
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-sub-superscripts t
 (defcustom org-export-with-sub-superscripts t
   "Non-nil means interpret \"_\" and \"^\" for export.
   "Non-nil means interpret \"_\" and \"^\" for export.
@@ -679,7 +711,8 @@ frequently in plain text."
   :type '(choice
   :type '(choice
 	  (const :tag "Interpret them" t)
 	  (const :tag "Interpret them" t)
 	  (const :tag "Curly brackets only" {})
 	  (const :tag "Curly brackets only" {})
-	  (const :tag "Do not interpret them" nil)))
+	  (const :tag "Do not interpret them" nil))
+  :safe (lambda (x) (memq x '(t nil {}))))
 
 
 (defcustom org-export-with-toc t
 (defcustom org-export-with-toc t
   "Non-nil means create a table of contents in exported files.
   "Non-nil means create a table of contents in exported files.
@@ -697,7 +730,9 @@ e.g. \"toc:nil\" or \"toc:3\"."
   :type '(choice
   :type '(choice
 	  (const :tag "No Table of Contents" nil)
 	  (const :tag "No Table of Contents" nil)
 	  (const :tag "Full Table of Contents" t)
 	  (const :tag "Full Table of Contents" t)
-	  (integer :tag "TOC to level")))
+	  (integer :tag "TOC to level"))
+  :safe (lambda (x) (or (booleanp x)
+			(integerp x))))
 
 
 (defcustom org-export-with-tables t
 (defcustom org-export-with-tables t
   "Non-nil means export tables.
   "Non-nil means export tables.
@@ -706,7 +741,8 @@ e.g. \"|:nil\"."
   :group 'org-export-general
   :group 'org-export-general
   :version "24.4"
   :version "24.4"
   :package-version '(Org . "8.0")
   :package-version '(Org . "8.0")
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-tags t
 (defcustom org-export-with-tags t
   "If nil, do not export tags, just remove them from headlines.
   "If nil, do not export tags, just remove them from headlines.
@@ -721,7 +757,8 @@ e.g. \"tags:nil\"."
   :type '(choice
   :type '(choice
 	  (const :tag "Off" nil)
 	  (const :tag "Off" nil)
 	  (const :tag "Not in TOC" not-in-toc)
 	  (const :tag "Not in TOC" not-in-toc)
-	  (const :tag "On" t)))
+	  (const :tag "On" t))
+  :safe (lambda (x) (memq x '(t nil not-in-toc))))
 
 
 (defcustom org-export-with-tasks t
 (defcustom org-export-with-tasks t
   "Non-nil means include TODO items for export.
   "Non-nil means include TODO items for export.
@@ -742,7 +779,10 @@ e.g. \"tasks:nil\"."
 	  (const :tag "Not-done tasks" todo)
 	  (const :tag "Not-done tasks" todo)
 	  (const :tag "Only done tasks" done)
 	  (const :tag "Only done tasks" done)
 	  (repeat :tag "Specific TODO keywords"
 	  (repeat :tag "Specific TODO keywords"
-		  (string :tag "Keyword"))))
+		  (string :tag "Keyword")))
+  :safe (lambda (x) (or (memq x '(nil t todo done))
+			(and (listp x)
+			     (cl-every #'stringp x)))))
 
 
 (defcustom org-export-with-title t
 (defcustom org-export-with-title t
   "Non-nil means print title into the exported file.
   "Non-nil means print title into the exported file.
@@ -751,14 +791,16 @@ e.g. \"title:nil\"."
   :group 'org-export-general
   :group 'org-export-general
   :version "25.1"
   :version "25.1"
   :package-version '(Org . "8.3")
   :package-version '(Org . "8.3")
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-time-stamp-file t
 (defcustom org-export-time-stamp-file t
   "Non-nil means insert a time stamp into the exported file.
   "Non-nil means insert a time stamp into the exported file.
 The time stamp shows when the file was created.  This option can
 The time stamp shows when the file was created.  This option can
 also be set with the OPTIONS keyword, e.g. \"timestamp:nil\"."
 also be set with the OPTIONS keyword, e.g. \"timestamp:nil\"."
   :group 'org-export-general
   :group 'org-export-general
-  :type 'boolean)
+  :type 'boolean
+  :safe #'booleanp)
 
 
 (defcustom org-export-with-timestamps t
 (defcustom org-export-with-timestamps t
   "Non nil means allow timestamps in export.
   "Non nil means allow timestamps in export.
@@ -780,7 +822,8 @@ This option can also be set with the OPTIONS keyword, e.g.
 	  (const :tag "All timestamps" t)
 	  (const :tag "All timestamps" t)
 	  (const :tag "Only active timestamps" active)
 	  (const :tag "Only active timestamps" active)
 	  (const :tag "Only inactive timestamps" inactive)
 	  (const :tag "Only inactive timestamps" inactive)
-	  (const :tag "No timestamp" nil)))
+	  (const :tag "No timestamp" nil))
+  :safe (lambda (x) (memq x '(t nil active inactive))))
 
 
 (defcustom org-export-with-todo-keywords t
 (defcustom org-export-with-todo-keywords t
   "Non-nil means include TODO keywords in export.
   "Non-nil means include TODO keywords in export.
@@ -832,7 +875,12 @@ HTML code while every other back-end will ignore it."
   :package-version '(Org . "8.0")
   :package-version '(Org . "8.0")
   :type '(repeat
   :type '(repeat
 	  (cons (string :tag "Shortcut")
 	  (cons (string :tag "Shortcut")
-		(string :tag "Back-end"))))
+		(string :tag "Back-end")))
+  :safe (lambda (x)
+	  (and (listp x)
+	       (cl-every #'consp x)
+	       (cl-every #'stringp (mapcar #'car x))
+	       (cl-every #'stringp (mapcar #'cdr x)))))
 
 
 (defcustom org-export-coding-system nil
 (defcustom org-export-coding-system nil
   "Coding system for the exported file."
   "Coding system for the exported file."