[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/eglot b4dd4f8 022/139: Report server status in the mode
From: |
João Távora |
Subject: |
[elpa] externals/eglot b4dd4f8 022/139: Report server status in the mode-line |
Date: |
Mon, 14 May 2018 09:54:44 -0400 (EDT) |
branch: externals/eglot
commit b4dd4f850e4af8b202b47c3a6a2c0664ebbeaa30
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>
Report server status in the mode-line
* eglot.el (eglot--status): New var.
(eglot--log-event): Try to be more useful for other stuff.
(eglot--protocol-initialize): Set status to nil on
successful connect.
(eglot--window/showMessage): Set status to error if needed.
(eglot--mode-line-format): Display status if serious.
---
eglot.el | 57 +++++++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 47 insertions(+), 10 deletions(-)
diff --git a/eglot.el b/eglot.el
index e5d6937..44023b7 100644
--- a/eglot.el
+++ b/eglot.el
@@ -92,6 +92,10 @@
"\"Spinner\" used by some servers.
A list (ID WHAT DONE-P).")
+(eglot--define-process-var eglot--status `(:unknown nil)
+ "Status as declared by the server.
+A list (WHAT SERIOUS-P).")
+
(defun eglot--command (&optional errorp)
(let ((probe (cdr (assoc major-mode eglot-executables))))
(unless (or (not errorp)
@@ -265,15 +269,22 @@ INTERACTIVE is t if called interactively."
(display-buffer buffer))
buffer))
-(defun eglot--log-event (proc type message id error)
+(defun eglot--log-event (proc type message &optional id error)
+ "Log an eglot-related event.
+PROC is the current process. TYPE is an identifier. MESSAGE is
+a JSON-like plist or anything else. ID is a continuation
+identifier. ERROR is non-nil if this is an error."
(with-current-buffer (eglot-events-buffer proc)
(let ((inhibit-read-only t))
(goto-char (point-max))
- (insert (format "%s%s%s:\n%s\n"
- type
- (if id (format " (id:%s)" id) "")
- (if error " ERROR" "")
- (pp-to-string message))))))
+ (let ((msg (format "%s%s%s:\n%s\n"
+ type
+ (if id (format " (id:%s)" id) "")
+ (if error " ERROR" "")
+ (pp-to-string message))))
+ (when error
+ (setq msg (propertize msg 'face 'error)))
+ (insert msg)))))
(defvar eglot--environment-vars
'(eglot--current-flymake-report-fn)
@@ -445,6 +456,7 @@ INTERACTIVE is t if caller was called interactively."
(lambda (&key capabilities)
(setf (eglot--capabilities process) capabilities)
(when interactive
+ (setf (eglot--status process) nil)
(eglot--message
"So yeah I got lots (%d) of capabilities"
(length capabilities)))))))
@@ -535,6 +547,16 @@ running. INTERACTIVE is t if called interactively."
(t
(eglot--message "OK so %s isn't visited" filename)))))
+(cl-defun eglot--window/showMessage
+ (process &key type message)
+ "Handle notification window/showMessage"
+ (when (<= 1 type)
+ (setf (eglot--status process) '("error" t))
+ (eglot--log-event process
+ (propertize "server-error" 'face 'error)
+ message))
+ (eglot--message "Server reports (type=%s): %s" type message))
+
;;; Helpers
;;;
@@ -603,8 +625,12 @@ running. INTERACTIVE is t if called interactively."
(pending (and proc
(hash-table-count
(eglot--pending-continuations proc))))
- (`(,_id ,what ,done-p) (and proc
- (eglot--spinner))))
+ (`(,_id ,doing ,done-p)
+ (and proc
+ (eglot--spinner proc)))
+ (`(,status ,serious-p)
+ (and proc
+ (eglot--status proc))))
(append
`((:propertize "eglot"
face eglot-mode-line
@@ -629,10 +655,21 @@ running. INTERACTIVE is t if called interactively."
help-echo ,(concat "mouse-1: go to events buffer\n"
"mouse-2: quit server\n"
"mouse-3: new process"))
- ,@(when (and what (not done-p))
+ ,@(when serious-p
+ `("/"
+ (:propertize
+ ,status
+ help-echo ,(concat "mouse-1: go to events buffer")
+ mouse-face mode-line-highlight
+ face compilation-mode-line-fail
+ keymap ,(let ((map (make-sparse-keymap)))
+ (define-key map [mode-line mouse-1]
+ 'eglot-events-buffer)
+ map))))
+ ,@(when (and doing (not done-p))
`("/"
(:propertize
- ,what
+ ,doing
help-echo ,(concat "mouse-1: go to events buffer")
mouse-face mode-line-highlight
face compilation-mode-line-run
- [elpa] externals/eglot 88e3655 040/139: Appease checkdoc.el, (continued)
- [elpa] externals/eglot 88e3655 040/139: Appease checkdoc.el, João Távora, 2018/05/14
- [elpa] externals/eglot c948713 035/139: Auto-reconnect on unexpected connection loss, João Távora, 2018/05/14
- [elpa] externals/eglot 1dc2a9f 021/139: Implement spinners and RLS's window/progress, João Távora, 2018/05/14
- [elpa] externals/eglot 931093e 032/139: Don't clutter UI with warnings, João Távora, 2018/05/14
- [elpa] externals/eglot 95983c9 028/139: Change status to error everytime an error is found, João Távora, 2018/05/14
- [elpa] externals/eglot be52e1e 037/139: Rework connection restarting again, João Távora, 2018/05/14
- [elpa] externals/eglot d2eca65 045/139: Fix another Flymake sync bug, João Távora, 2018/05/14
- [elpa] externals/eglot f7f77e1 044/139: Make M-x eglot the main entry point, João Távora, 2018/05/14
- [elpa] externals/eglot d90efdf 001/139: Initial commit, João Távora, 2018/05/14
- [elpa] externals/eglot 1514e0f 052/139: Fix a couple of Rust-related edge cases, João Távora, 2018/05/14
- [elpa] externals/eglot b4dd4f8 022/139: Report server status in the mode-line,
João Távora <=
- [elpa] externals/eglot 6689a15 026/139: Add eglot-clear-status interactive command, João Távora, 2018/05/14
- [elpa] externals/eglot a3545fb 050/139: Rename RPC methods for clarity, João Távora, 2018/05/14
- [elpa] externals/eglot 9665a3e 051/139: Fix textDocument/didChange, João Távora, 2018/05/14
- [elpa] externals/eglot eebd32b 059/139: When user declines to reconnect, first quit existing server, João Távora, 2018/05/14
- [elpa] externals/eglot 17e0ca4 047/139: Fix Flymake diagnostic positions, João Távora, 2018/05/14
- [elpa] externals/eglot 9d404c9 054/139: Update README.md, João Távora, 2018/05/14
- [elpa] externals/eglot 29d4103 056/139: Fix mode-line mouse-clicks from outside selected window, João Távora, 2018/05/14
- [elpa] externals/eglot b1554fc 055/139: * eglot.el (eglot--process-receive): Skip null method notifs., João Távora, 2018/05/14
- [elpa] externals/eglot 51ff863 046/139: Must re-announce didOpen after reconnect, João Távora, 2018/05/14
- [elpa] externals/eglot c95a0a4 041/139: Multiple servers per project are possible, João Távora, 2018/05/14