>From b75d0469dc986a73cbac6351537c30e535ce2890 Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen Date: Wed, 8 Nov 2017 11:58:31 -0800 Subject: [PATCH] Provide more control over writing of objects in object-write * lisp/emacs-lisp/eieio.el (eieio-print-indentation, eieio-print-object-name): New variables controlling whether an object name is printed for each object, and whether an object's contents are indented or not. Object names are obsoleted; omitting indentation reduces the size of persistence files. --- lisp/emacs-lisp/eieio.el | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index ca91c5a871..e07392d8c9 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -847,7 +847,17 @@ 'constructor (princ (object-print object) stream)) (defvar eieio-print-depth 0 - "When printing, keep track of the current indentation depth.") + "The current indentation depth while printing. +Ignored if `eieio-print-indentation' is nil.") + +(defvar eieio-print-indentation t + "When non-nil, indent contents of printed objects.") + +(defvar eieio-print-object-name t + "When non-nil write the object name in `object-write'. +Does not affect objects subclassing `eieio-named'. Writing +object names is deprecated as of Emacs 24.4; consider setting +this to nil.") (cl-defgeneric object-write (this &optional comment) "Write out object THIS to the current stream. @@ -860,9 +870,10 @@ eieio-print-depth If optional COMMENT is non-nil, include comments when outputting this object." (when comment - (princ ";; Object ") - (princ (eieio-object-name-string this)) - (princ "\n") + (when eieio-print-object-name + (princ ";; Object ") + (princ (eieio-object-name-string this)) + (princ "\n")) (princ comment) (princ "\n")) (let* ((cl (eieio-object-class this)) @@ -871,11 +882,13 @@ eieio-print-depth ;; It should look like this: ;; ( ... ) ;; Each slot's slot is writen using its :writer. - (princ (make-string (* eieio-print-depth 2) ? )) + (when eieio-print-indentation + (princ (make-string (* eieio-print-depth 2) ? ))) (princ "(") (princ (symbol-name (eieio--class-constructor (eieio-object-class this)))) - (princ " ") - (prin1 (eieio-object-name-string this)) + (when eieio-print-object-name + (princ " ") + (prin1 (eieio-object-name-string this))) (princ "\n") ;; Loop over all the public slots (let ((slots (eieio--class-slots cv)) @@ -889,7 +902,8 @@ eieio-print-depth (unless (or (not i) (equal v (cl--slot-descriptor-initform slot))) (unless (bolp) (princ "\n")) - (princ (make-string (* eieio-print-depth 2) ? )) + (when eieio-print-indentation + (princ (make-string (* eieio-print-depth 2) ? ))) (princ (symbol-name i)) (if (alist-get :printer (cl--slot-descriptor-props slot)) ;; Use our public printer @@ -904,7 +918,7 @@ eieio-print-depth "\n" " ")) (eieio-override-prin1 v)))))))) (princ ")") - (when (= eieio-print-depth 0) + (when (zerop eieio-print-depth) (princ "\n")))) (defun eieio-override-prin1 (thing) @@ -923,14 +937,16 @@ eieio-list-prin1 (progn (princ "'") (prin1 list)) - (princ (make-string (* eieio-print-depth 2) ? )) + (when eieio-print-indentation + (princ (make-string (* eieio-print-depth 2) ? ))) (princ "(list") (let ((eieio-print-depth (1+ eieio-print-depth))) (while list (princ "\n") (if (eieio-object-p (car list)) (object-write (car list)) - (princ (make-string (* eieio-print-depth 2) ? )) + (when eieio-print-indentation + (princ (make-string (* eieio-print-depth) ? ))) (eieio-override-prin1 (car list))) (setq list (cdr list)))) (princ ")"))) -- 2.15.0