Fix #252: Use new stable API eglot-current-server.

See 146108af7a.
This commit is contained in:
Vincent Zhang 2019-11-11 23:59:20 +08:00
parent 33caf3e1d7
commit 0553a3f348
2 changed files with 50 additions and 46 deletions

View file

@ -489,6 +489,11 @@ It requires `circe' package."
"Face for error state in LSP." "Face for error state in LSP."
:group 'doom-modeline-faces) :group 'doom-modeline-faces)
(defface doom-modeline-lsp-running
'((t (:inherit compilation-mode-line-run)))
"Face for running state in LSP."
:group 'doom-modeline-faces)
;; ;;
;; Externals ;; Externals

View file

@ -107,7 +107,7 @@
(declare-function edebug-help 'edebug) (declare-function edebug-help 'edebug)
(declare-function edebug-next-mode 'edebug) (declare-function edebug-next-mode 'edebug)
(declare-function edebug-stop 'edebug) (declare-function edebug-stop 'edebug)
(declare-function eglot--current-server 'eglot) (declare-function eglot-current-server 'eglot)
(declare-function eglot--major-mode 'eglot) (declare-function eglot--major-mode 'eglot)
(declare-function eglot--project-nickname 'eglot) (declare-function eglot--project-nickname 'eglot)
(declare-function eglot--spinner 'eglot) (declare-function eglot--spinner 'eglot)
@ -1769,53 +1769,52 @@ mouse-1: Reload to start server")
(defun doom-modeline-update-eglot () (defun doom-modeline-update-eglot ()
"Update `eglot' status." "Update `eglot' status."
(setq doom-modeline--eglot (setq doom-modeline--eglot
(when eglot--managed-mode (pcase-let* ((server (eglot-current-server))
(pcase-let* ((server (eglot--current-server)) (nick (and server (eglot--project-nickname server)))
(nick (and server (eglot--project-nickname server))) (pending (and server (hash-table-count
(pending (and server (hash-table-count (jsonrpc--request-continuations server))))
(jsonrpc--request-continuations server)))) (`(,_id ,doing ,done-p ,detail) (and server (eglot--spinner server)))
(`(,_id ,doing ,done-p ,detail) (and server (eglot--spinner server))) (last-error (and server (jsonrpc-last-error server)))
(last-error (and server (jsonrpc-last-error server))) (face (cond (last-error 'doom-modeline-lsp-error)
(face (cond (last-error 'doom-modeline-lsp-error) ((and doing (not done-p)) 'doom-modeline-lsp-running)
((and doing (not done-p)) 'compilation-mode-line-run) ((and pending (cl-plusp pending)) 'doom-modeline-lsp-warning)
((and pending (cl-plusp pending)) 'doom-modeline-lsp-warning) (nick 'doom-modeline-lsp-success)
(nick 'doom-modeline-lsp-success) (t 'mode-line)))
(t 'mode-line))) (icon (doom-modeline-lsp-icon "EGLOT" face)))
(icon (doom-modeline-lsp-icon "EGLOT" face))) (propertize icon
(propertize icon 'help-echo (cond
'help-echo (cond (last-error
(last-error (format "EGLOT\nAn error occured: %s
(format "EGLOT\nAn error occured: %s mouse-3: Clear this status" (plist-get last-error :message)))
mouse-3: clear this status" (plist-get last-error :message))) ((and doing (not done-p))
((and doing (not done-p)) (format "EGLOT\n%s%s" doing
(format "EGLOT\n%s%s" doing (if detail (format "%s" detail) "")))
(if detail (format "%s" detail) ""))) ((and pending (cl-plusp pending))
((and pending (cl-plusp pending)) (format "EGLOT\n%d outstanding requests" pending))
(format "EGLOT\n%d outstanding requests" pending)) (nick (format "EGLOT Connected (%s/%s)
(nick (format "EGLOT Connected (%s/%s) C-mouse-1: Go to server errors
C-mouse-1: Disply server errors mouse-1: Go to server events
mouse-1: Display server events
mouse-2: Quit server mouse-2: Quit server
mouse-3: Reconnect to server" nick (eglot--major-mode server))) mouse-3: Reconnect to server" nick (eglot--major-mode server)))
(t "EGLOT Disconnected")) (t "EGLOT Disconnected"))
'mouse-face 'mode-line-highlight 'mouse-face 'mode-line-highlight
'local-map (let ((map (make-sparse-keymap))) 'local-map (let ((map (make-sparse-keymap)))
(cond (last-error (cond (last-error
(define-key map [mode-line mouse-3] (define-key map [mode-line mouse-3]
#'eglot-clear-status)) #'eglot-clear-status))
((and pending (cl-plusp pending)) ((and pending (cl-plusp pending))
(define-key map [mode-line mouse-3] (define-key map [mode-line mouse-3]
#'eglot-forget-pending-continuations)) #'eglot-forget-pending-continuations))
(nick (nick
(define-key map [mode-line C-mouse-1] (define-key map [mode-line C-mouse-1]
#'eglot-stderr-buffer) #'eglot-stderr-buffer)
(define-key map [mode-line mouse-1] (define-key map [mode-line mouse-1]
#'eglot-events-buffer) #'eglot-events-buffer)
(define-key map [mode-line mouse-2] (define-key map [mode-line mouse-2]
#'eglot-shutdown) #'eglot-shutdown)
(define-key map [mode-line mouse-3] (define-key map [mode-line mouse-3]
#'eglot-reconnect))) #'eglot-reconnect)))
map)))))) map)))))
(add-hook 'eglot--managed-mode-hook #'doom-modeline-update-eglot) (add-hook 'eglot--managed-mode-hook #'doom-modeline-update-eglot)
(doom-modeline-def-segment lsp (doom-modeline-def-segment lsp