]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix pretty-printing of multiple JSON objects
authorLars Ingebrigtsen <larsi@gnus.org>
Tue, 9 Jul 2019 18:40:23 +0000 (20:40 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 9 Jul 2019 18:48:58 +0000 (20:48 +0200)
* lisp/json.el (json-pretty-print-max-secs): Make obsolete.
(json-pretty-print): Pretty-print all JSON objects in the region
instead of just the first one (and then deleting all other
objects) (bug#34160).

lisp/json.el

index a36cff7c67b05282311571209a153c8e11620d01..8dd96b08640b13d18e520e3fa73f1223784b8bb6 100644 (file)
@@ -758,10 +758,8 @@ With prefix argument MINIMIZE, minimize it instead."
   (json-pretty-print (point-min) (point-max) minimize))
 
 (defvar json-pretty-print-max-secs 2.0
-  "Maximum time for `json-pretty-print's comparison.
-The function `json-pretty-print' uses `replace-region-contents'
-(which see) passing the value of this variable as argument
-MAX-SECS.")
+  "Maximum time for `json-pretty-print's comparison.")
+(make-obsolete-variable json-pretty-print-max-secs nil "27.1")
 
 (defun json-pretty-print (begin end &optional minimize)
   "Pretty-print selected region.
@@ -771,14 +769,17 @@ With prefix argument MINIMIZE, minimize it instead."
         ;; Distinguish an empty objects from 'null'
         (json-null :json-null)
         ;; Ensure that ordering is maintained
-        (json-object-type 'alist))
-    (replace-region-contents
-     begin end
-     (lambda () (json-encode (json-read)))
-     json-pretty-print-max-secs
-     ;; FIXME: What's a good value here?  Can we use something better,
-     ;; e.g., by deriving a value from the size of the region?
-     64)))
+        (json-object-type 'alist)
+        json)
+    (save-restriction
+      (narrow-to-region begin end)
+      (goto-char begin)
+      (while (setq json (condition-case _
+                            (json-read)
+                          (json-error nil)))
+        (delete-region begin (point))
+        (insert (json-encode json))
+        (setq begin (point))))))
 
 (defun json-pretty-print-buffer-ordered (&optional minimize)
   "Pretty-print current buffer with object keys ordered.