Jsonrpc: don't suddenly jump point in events buffer
* lisp/jsonrpc.el (jsonrpc--save-excursion-maybe): New macro. * lisp/jsonrpc.el (jsonrpc--log-event, jsonrpc--forwarding-buffer): Use it.
This commit is contained in:
@@ -1053,6 +1053,15 @@ TIMEOUT is nil)."
|
|||||||
fn oops)
|
fn oops)
|
||||||
(remove-hook 'jsonrpc-event-hook fn)))))))
|
(remove-hook 'jsonrpc-event-hook fn)))))))
|
||||||
|
|
||||||
|
(defmacro jsonrpc--save-excursion-maybe (&rest body)
|
||||||
|
"Run BODY, preserving point unless it was at `point-max'.
|
||||||
|
If point is already at end of buffer, allow it to follow any
|
||||||
|
text inserted there. Otherwise, restore it afterwards."
|
||||||
|
(declare (indent 0))
|
||||||
|
`(if (= (point) (point-max))
|
||||||
|
(progn ,@body)
|
||||||
|
(save-excursion ,@body)))
|
||||||
|
|
||||||
(defun jsonrpc--limit-buffer-size (max-size)
|
(defun jsonrpc--limit-buffer-size (max-size)
|
||||||
"Limit the current buffer to MAX-SIZE by eating lines at the beginning.
|
"Limit the current buffer to MAX-SIZE by eating lines at the beginning.
|
||||||
Do nothing if MAX-SIZE is nil."
|
Do nothing if MAX-SIZE is nil."
|
||||||
@@ -1137,12 +1146,13 @@ of the API instead.")
|
|||||||
(concat "\n" (pp-to-string
|
(concat "\n" (pp-to-string
|
||||||
foreign-message))))
|
foreign-message))))
|
||||||
(concat log-text "\n")))))))
|
(concat log-text "\n")))))))
|
||||||
(goto-char (point-max))
|
|
||||||
;; XXX: could use `run-at-time' to delay server logs
|
;; XXX: could use `run-at-time' to delay server logs
|
||||||
;; slightly to play nice with verbose servers' stderr.
|
;; slightly to play nice with verbose servers' stderr.
|
||||||
(when error
|
(when error
|
||||||
(setq msg (propertize msg 'face 'error)))
|
(setq msg (propertize msg 'face 'error)))
|
||||||
(insert-before-markers msg)
|
(jsonrpc--save-excursion-maybe
|
||||||
|
(goto-char (point-max))
|
||||||
|
(insert-before-markers msg))
|
||||||
(jsonrpc--limit-buffer-size max))))))
|
(jsonrpc--limit-buffer-size max))))))
|
||||||
|
|
||||||
(defun jsonrpc--forwarding-buffer (name prefix conn)
|
(defun jsonrpc--forwarding-buffer (name prefix conn)
|
||||||
@@ -1167,11 +1177,12 @@ PREFIX to CONN's events buffer."
|
|||||||
(line-beginning-position 0)
|
(line-beginning-position 0)
|
||||||
(line-end-position 0))
|
(line-end-position 0))
|
||||||
do (with-current-buffer (jsonrpc-events-buffer conn)
|
do (with-current-buffer (jsonrpc-events-buffer conn)
|
||||||
(goto-char (point-max))
|
|
||||||
(let ((inhibit-read-only t))
|
(let ((inhibit-read-only t))
|
||||||
(insert
|
(jsonrpc--save-excursion-maybe
|
||||||
(propertize (format "%s %s\n" prefix line)
|
(goto-char (point-max))
|
||||||
'face 'shadow))
|
(insert-before-markers
|
||||||
|
(propertize (format "%s %s\n" prefix line)
|
||||||
|
'face 'shadow)))
|
||||||
(jsonrpc--limit-buffer-size max)))
|
(jsonrpc--limit-buffer-size max)))
|
||||||
until (eobp)))))
|
until (eobp)))))
|
||||||
nil t))
|
nil t))
|
||||||
|
|||||||
Reference in New Issue
Block a user