aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Távora2026-01-08 09:01:21 +0000
committerJoão Távora2026-01-11 03:42:01 +0000
commitb26e9bb6bc7c0f6330dc67c365e45232ddb54368 (patch)
treed3a768af804f4747639d583aaa7dd71d57c80091
parent0bb36ec255071afee2bdf8928290f47ee0e3d7ab (diff)
downloademacs-b26e9bb6bc7c0f6330dc67c365e45232ddb54368.tar.gz
emacs-b26e9bb6bc7c0f6330dc67c365e45232ddb54368.zip
Jsonrpc: add major mode for events buffers
If the 'jq' program is installed, this dramatically simplifies debugging LSP transcripts. * lisp/jsonrpc.el (jsonrpc-events-jq-at-point): New function. (jsonrpc-events-occur-at-point): New function. (jsonrpc-events-mode-map): New variable. (jsonrpc-events-mode): New major mode. (jsonrpc-events-buffer): Use new mode.
-rw-r--r--lisp/jsonrpc.el31
1 files changed, 29 insertions, 2 deletions
diff --git a/lisp/jsonrpc.el b/lisp/jsonrpc.el
index d7bba4e389c..955a4f89009 100644
--- a/lisp/jsonrpc.el
+++ b/lisp/jsonrpc.el
@@ -208,6 +208,34 @@ JSONRPC message."
208 "jsonrpc-lambda-elem"))) 208 "jsonrpc-lambda-elem")))
209 `(lambda (,e) (apply (cl-function (lambda ,cl-lambda-list ,@body)) ,e)))) 209 `(lambda (,e) (apply (cl-function (lambda ,cl-lambda-list ,@body)) ,e))))
210 210
211(defun jsonrpc-events-jq-at-point ()
212 "Find first { in line, use forward-sexp to grab JSON, pipe through jq."
213 (interactive)
214 (save-excursion
215 (beginning-of-line)
216 (when (search-forward "{" (line-end-position) t)
217 (backward-char)
218 (let ((start (point)))
219 (forward-sexp)
220 (shell-command-on-region start (point) "jq" "*jq output*")))))
221
222(defun jsonrpc-events-occur-at-point ()
223 "Run occur on thing at point."
224 (interactive)
225 (occur (thing-at-point 'symbol)))
226
227(defvar jsonrpc-events-mode-map
228 (let ((map (make-sparse-keymap)))
229 (define-key map (kbd "RET") 'jsonrpc-events-jq-at-point)
230 (define-key map (kbd "C-c C-o") 'jsonrpc-events-occur-at-point)
231 map)
232 "Keymap for `jsonrpc-events-mode'.")
233
234(define-derived-mode jsonrpc-events-mode special-mode "JSONRPC-Events"
235 "Major mode for JSONRPC events buffers."
236 (buffer-disable-undo)
237 (setq buffer-read-only t))
238
211(defun jsonrpc-events-buffer (connection) 239(defun jsonrpc-events-buffer (connection)
212 "Get or create JSONRPC events buffer for CONNECTION." 240 "Get or create JSONRPC events buffer for CONNECTION."
213 (let ((probe (jsonrpc--events-buffer connection))) 241 (let ((probe (jsonrpc--events-buffer connection)))
@@ -215,8 +243,7 @@ JSONRPC message."
215 probe 243 probe
216 (with-current-buffer 244 (with-current-buffer
217 (get-buffer-create (format "*%s events*" (jsonrpc-name connection))) 245 (get-buffer-create (format "*%s events*" (jsonrpc-name connection)))
218 (buffer-disable-undo) 246 (jsonrpc-events-mode)
219 (setq buffer-read-only t)
220 (setf (jsonrpc--events-buffer connection) 247 (setf (jsonrpc--events-buffer connection)
221 (current-buffer)))))) 248 (current-buffer))))))
222 249