branch: externals/calibre
commit 6fc4f2782667576f04b7883f6a23a99486749595
Author: Kjartan Oli Agustsson <[email protected]>
Commit: Kjartan Oli Agustsson <[email protected]>
Add macros to create set/unset functions for non-list fields
* calibre-edit.el (calibre-edit--metadata-setter): New macro.
(calibre-edit--metadata-unsetter): New macro.
(calibre-edit--metadata-setter-pair): New macro.
As with calibre-edit--metadata-adder and
calibre-edit--metadata-remover setting and un-setting non-list
metadata fields will be performed the same way no matter the field.
Using macros to create these function pairs ensures consistency.
---
calibre-edit.el | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/calibre-edit.el b/calibre-edit.el
index bf2b154c5d..01e6321951 100644
--- a/calibre-edit.el
+++ b/calibre-edit.el
@@ -155,6 +155,31 @@ function does nothing."
(calibre-edit--metadata-adder ,field)
(calibre-edit--metadata-remover ,field)))
+(defmacro calibre-edit--metadata-setter (field)
+ "Create a function to set FIELD of a given book."
+ (let ((name (intern (format "calibre-edit-set-%s" field)))
+ (getter (intern (format "calibre-book-%s" field))))
+ `(defun ,name (,field book)
+ ,(format "Set BOOK's %s to %s"
+ field
+ (upcase (prin1-to-string field)))
+ (calibre-edit--preserve-original book)
+ (setf (,getter book) ,field))))
+
+(defmacro calibre-edit--metadata-unsetter (field)
+ "Create a function to unset FIELD of a given book."
+ (let ((name (intern (format "calibre-edit-unset-%s" field)))
+ (setter (intern (format "calibre-edit-set-%s" field))))
+ `(defun ,name (book)
+ ,(format "Unset BOOK's %s" field)
+ (,setter nil book))))
+
+(defmacro calibre-edit--metadata-setter-pair (field)
+ "Create a pair of set/unset functions to modify FIELD of a given book."
+ `(progn
+ (calibre-edit--metadata-setter ,field)
+ (calibre-edit--metadata-unsetter ,field)))
+
(calibre-util--macro-map
calibre-edit--metadata-modifier-pair (tags authors))
(defun calibre-edit-modified-p (book)