]> git.eshelyaron.com Git - emacs.git/commitdiff
Trim JSONRPC events buffer when it's too large
authorJoão Távora <joaotavora@gmail.com>
Thu, 9 Aug 2018 12:04:03 +0000 (13:04 +0100)
committerJoão Távora <joaotavora@gmail.com>
Thu, 9 Aug 2018 12:04:03 +0000 (13:04 +0100)
* lisp/jsonrpc.el (Version): Bump to 1.0.2
(jsonrpc--events-buffer-scrollback-size): New
jsonrpc-connection slot.
(jsonrpc--log-event): Use it to trim buffer.

lisp/jsonrpc.el

index 8e1e2aba333351be323d83e66b0b45faf3df3224..a137616ecaeee00928ecb506d3602122b13cfe89 100644 (file)
@@ -6,7 +6,7 @@
 ;; Maintainer: João Távora <joaotavora@gmail.com>
 ;; Keywords: processes, languages, extensions
 ;; Package-Requires: ((emacs "25.2"))
-;; Version: 1.0.1
+;; Version: 1.0.2
 
 ;; This is an Elpa :core package.  Don't use functionality that is not
 ;; compatible with Emacs 25.2.
     :documentation "A hash table of request ID to continuation lambdas.")
    (-events-buffer
     :accessor jsonrpc--events-buffer
-    :documentation "A buffer pretty-printing the JSON-RPC RPC events")
+    :documentation "A buffer pretty-printing the JSONRPC events")
+   (-events-buffer-scrollback-size
+    :initarg :events-buffer-scrollback-size
+    :accessor jsonrpc--events-buffer-scrollback-size
+    :documentation "If non-nil, maximum size of events buffer.")
    (-deferred-actions
     :initform (make-hash-table :test #'equal)
     :accessor jsonrpc--deferred-actions
@@ -660,15 +664,26 @@ originated."
                       (if type
                           (format "-%s" subtype)))))
         (goto-char (point-max))
-        (let ((msg (format "%s%s%s %s:\n%s\n"
-                           type
-                           (if id (format " (id:%s)" id) "")
-                           (if error " ERROR" "")
-                           (current-time-string)
-                           (pp-to-string message))))
-          (when error
-            (setq msg (propertize msg 'face 'error)))
-          (insert-before-markers msg))))))
+        (prog1
+            (let ((msg (format "%s%s%s %s:\n%s\n"
+                               type
+                               (if id (format " (id:%s)" id) "")
+                               (if error " ERROR" "")
+                               (current-time-string)
+                               (pp-to-string message))))
+              (when error
+                (setq msg (propertize msg 'face 'error)))
+              (insert-before-markers msg))
+          ;; Trim the buffer if it's too large
+          (let ((max (jsonrpc--events-buffer-scrollback-size connection)))
+            (when max
+              (save-excursion
+                (goto-char (point-min))
+                (while (> (buffer-size) max)
+                  (delete-region (point) (progn (forward-line 1)
+                                                (forward-sexp 1)
+                                                (forward-line 2)
+                                                (point))))))))))))
 
 (provide 'jsonrpc)
 ;;; jsonrpc.el ends here