diff options
| author | João Távora | 2026-01-08 09:01:21 +0000 |
|---|---|---|
| committer | João Távora | 2026-01-11 03:42:01 +0000 |
| commit | b26e9bb6bc7c0f6330dc67c365e45232ddb54368 (patch) | |
| tree | d3a768af804f4747639d583aaa7dd71d57c80091 | |
| parent | 0bb36ec255071afee2bdf8928290f47ee0e3d7ab (diff) | |
| download | emacs-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.el | 31 |
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 | ||