Modify 'defflag' macro to accept a default value

This commit is contained in:
Sameer Rahmani 2021-05-07 14:09:16 +01:00
parent 16c2ad9fe8
commit 40432de56c
1 changed files with 8 additions and 4 deletions

View File

@ -80,14 +80,18 @@ For example, `(fg42/merge-flags (list f1 f2 f3) f4 -f2)' will return `(f1 f3 f4)
`(fg42/-merge-flags ,flags-set ,@(mapcar (lambda (x) `',x) new-flags)))
(defmacro defflag (flag-name docstring)
"Define a new flag FLAG-NAME with the given DOCSTRING."
(let ((var-name (intern (format "fg42/-flag-%s" flag-name))))
(defmacro defflag (flag-name docstring &optional default-value)
"Define a new flag FLAG-NAME with the given DOCSTRING.
If the DEFAULT-VALUE is a non nil value, then the flag will be
added to the activa flags list."
(let ((var-name (intern (format "fg42/-flag-%s" flag-name)))
(set-default (if default-value `((add-to-list 'fg42/flags ',flag-name)) ())))
`(if (boundp ',var-name)
(warn (format "Flag name `%s' already defined" ,(format "%s" flag-name)))
(progn
(defvar ,var-name t)
(add-to-list 'fg42/available-flags ',flag-name)))))
(add-to-list 'fg42/available-flags ',flag-name)
,@set-default))))
(defmacro when-flag (flag &rest body)