]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-lib.el
emacs: Fix bug in resynchronizing after a JSON parse error
[notmuch] / emacs / notmuch-lib.el
index 3e8647db78c8710e7d3bb0926e8b52729866b3ac..fb6d3e7f36b2e4f580f28e77325df840848fe88b 100644 (file)
@@ -168,8 +168,14 @@ user-friendly queries."
 
 (defun notmuch-common-do-stash (text)
   "Common function to stash text in kill ring, and display in minibuffer."
-  (kill-new text)
-  (message "Stashed: %s" text))
+  (if text
+      (progn
+       (kill-new text)
+       (message "Stashed: %s" text))
+    ;; There is nothing to stash so stash an empty string so the user
+    ;; doesn't accidentally paste something else somewhere.
+    (kill-new "")
+    (message "Nothing to stash!")))
 
 ;;
 
@@ -459,15 +465,19 @@ Entering JSON objects is currently unimplemented."
   (with-current-buffer (notmuch-json-buffer jp)
     ;; Disallow terminators
     (setf (notmuch-json-allow-term jp) nil)
-    (or (notmuch-json-scan-to-value jp)
-       (if (/= (char-after) ?\[)
-           (signal 'json-readtable-error (list "expected '['"))
-         (forward-char)
-         (push ?\] (notmuch-json-term-stack jp))
-         ;; Expect a value or terminator next
-         (setf (notmuch-json-next jp) 'expect-value
-               (notmuch-json-allow-term jp) t)
-         t))))
+    ;; Save "next" so we can restore it if there's a syntax error
+    (let ((saved-next (notmuch-json-next jp)))
+      (or (notmuch-json-scan-to-value jp)
+         (if (/= (char-after) ?\[)
+             (progn
+               (setf (notmuch-json-next jp) saved-next)
+               (signal 'json-readtable-error (list "expected '['")))
+           (forward-char)
+           (push ?\] (notmuch-json-term-stack jp))
+           ;; Expect a value or terminator next
+           (setf (notmuch-json-next jp) 'expect-value
+                 (notmuch-json-allow-term jp) t)
+           t)))))
 
 (defun notmuch-json-read (jp)
   "Parse the value at point in JP's buffer.