From: João Távora Date: Thu, 9 Aug 2018 12:04:03 +0000 (+0100) Subject: Trim JSONRPC events buffer when it's too large X-Git-Tag: emacs-27.0.90~4623 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=449954dda84aa392312ab714f918a756c12adb32;p=emacs.git Trim JSONRPC events buffer when it's too large * 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. --- diff --git a/lisp/jsonrpc.el b/lisp/jsonrpc.el index 8e1e2aba333..a137616ecae 100644 --- a/lisp/jsonrpc.el +++ b/lisp/jsonrpc.el @@ -6,7 +6,7 @@ ;; Maintainer: João Távora ;; 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. @@ -74,7 +74,11 @@ :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