Skip to content

Commit fb4c35c

Browse files
authored
[modeline] - Move workspace status to modeline (#2243)
* move workspace status to modeline * Change changelog * Add release to defcustom
1 parent 87aa304 commit fb4c35c

File tree

3 files changed

+102
-66
lines changed

3 files changed

+102
-66
lines changed

CHANGELOG.org

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* Add Nix support.
88
* Add Racket support.
99
* Provided automatic installers for `lsp-clojure` (`clojure-lsp`).
10+
* Added ~lsp-modeline-workspace-status-mode~ and option to disable it via ~lsp-modeline-workspace-status-enable~.
1011
** Release 7.0.1
1112
* Introduced ~lsp-diagnostics-mode~.
1213
* Safe renamed ~lsp-flycheck-default-level~ -> ~lsp-diagnostics-flycheck-default-level~

lsp-mode.el

Lines changed: 67 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,12 @@ If this is set to nil, `eldoc' will show only the symbol information."
645645
:type 'boolean
646646
:group 'lsp-mode)
647647

648+
(defcustom lsp-modeline-workspace-status-enable t
649+
"Whether to show workspace status on modeline."
650+
:type 'boolean
651+
:group 'lsp-mode
652+
:package-version '(lsp-mode . "7.1"))
653+
648654
(defcustom lsp-headerline-breadcrumb-enable nil
649655
"Whether to enable breadcrumb on headerline."
650656
:type 'boolean
@@ -3582,71 +3588,65 @@ in that particular folder."
35823588
(define-minor-mode lsp-managed-mode
35833589
"Mode for source buffers managed by lsp-mode."
35843590
nil nil nil
3585-
(let ((status '(t (:eval (-keep #'lsp--workspace-status-string (lsp-workspaces))))))
3586-
(cond
3587-
(lsp-managed-mode
3588-
(when (lsp-feature? "textDocument/hover")
3589-
(add-function :before-until (local 'eldoc-documentation-function) #'lsp-eldoc-function)
3590-
(eldoc-mode 1))
3591-
3592-
(add-hook 'after-change-functions #'lsp-on-change nil t)
3593-
(add-hook 'after-revert-hook #'lsp-on-revert nil t)
3594-
(add-hook 'after-save-hook #'lsp-on-save nil t)
3595-
(add-hook 'auto-save-hook #'lsp--on-auto-save nil t)
3596-
(add-hook 'before-change-functions #'lsp-before-change nil t)
3597-
(add-hook 'before-save-hook #'lsp--before-save nil t)
3598-
(add-hook 'kill-buffer-hook #'lsp--text-document-did-close nil t)
3599-
(add-hook 'post-command-hook #'lsp--post-command nil t)
3600-
3601-
(lsp--update-on-type-formatting-hook)
3602-
(lsp--update-signature-help-hook)
3603-
3604-
(lsp--semantic-highlighting-warn-about-deprecated-setting)
3605-
3606-
(when lsp-enable-xref
3607-
(add-hook 'xref-backend-functions #'lsp--xref-backend nil t))
3608-
3609-
(setq-local global-mode-string (if (-contains? global-mode-string status)
3610-
global-mode-string
3611-
(cons status global-mode-string)))
3612-
3613-
(lsp-configure-buffer)
3614-
(let ((buffer (lsp-current-buffer)))
3615-
(run-with-idle-timer
3616-
0.0 nil
3617-
(lambda ()
3618-
(when (lsp-buffer-live-p buffer)
3619-
(lsp-with-current-buffer buffer
3620-
(lsp--on-change-debounce buffer)
3621-
(lsp--on-idle buffer)))))))
3622-
(t
3623-
(lsp-unconfig-buffer)
3624-
(remove-function (local 'eldoc-documentation-function) #'lsp-eldoc-function)
3625-
3626-
(remove-hook 'post-command-hook #'lsp--post-command t)
3627-
(remove-hook 'after-change-functions #'lsp-on-change t)
3628-
(remove-hook 'after-revert-hook #'lsp-on-revert t)
3629-
(remove-hook 'after-save-hook #'lsp-on-save t)
3630-
(remove-hook 'auto-save-hook #'lsp--on-auto-save t)
3631-
(remove-hook 'before-change-functions #'lsp-before-change t)
3632-
(remove-hook 'before-save-hook #'lsp--before-save t)
3633-
(remove-hook 'kill-buffer-hook #'lsp--text-document-did-close t)
3634-
3635-
(lsp--update-on-type-formatting-hook :cleanup)
3636-
(lsp--update-signature-help-hook :cleanup)
3637-
3638-
(when lsp--on-idle-timer
3639-
(cancel-timer lsp--on-idle-timer)
3640-
(setq lsp--on-idle-timer nil))
3641-
3642-
(remove-hook 'lsp-on-idle-hook #'lsp--document-links t)
3643-
(remove-hook 'lsp-on-idle-hook #'lsp--document-highlight t)
3644-
3645-
(lsp--remove-overlays 'lsp-highlight)
3646-
(lsp--remove-overlays 'lsp-links)
3647-
3648-
(remove-hook 'xref-backend-functions #'lsp--xref-backend t)
3649-
(setq-local global-mode-string (remove status global-mode-string))))))
3591+
(cond
3592+
(lsp-managed-mode
3593+
(when (lsp-feature? "textDocument/hover")
3594+
(add-function :before-until (local 'eldoc-documentation-function) #'lsp-eldoc-function)
3595+
(eldoc-mode 1))
3596+
3597+
(add-hook 'after-change-functions #'lsp-on-change nil t)
3598+
(add-hook 'after-revert-hook #'lsp-on-revert nil t)
3599+
(add-hook 'after-save-hook #'lsp-on-save nil t)
3600+
(add-hook 'auto-save-hook #'lsp--on-auto-save nil t)
3601+
(add-hook 'before-change-functions #'lsp-before-change nil t)
3602+
(add-hook 'before-save-hook #'lsp--before-save nil t)
3603+
(add-hook 'kill-buffer-hook #'lsp--text-document-did-close nil t)
3604+
(add-hook 'post-command-hook #'lsp--post-command nil t)
3605+
3606+
(lsp--update-on-type-formatting-hook)
3607+
(lsp--update-signature-help-hook)
3608+
3609+
(lsp--semantic-highlighting-warn-about-deprecated-setting)
3610+
3611+
(when lsp-enable-xref
3612+
(add-hook 'xref-backend-functions #'lsp--xref-backend nil t))
3613+
3614+
(lsp-configure-buffer)
3615+
(let ((buffer (lsp-current-buffer)))
3616+
(run-with-idle-timer
3617+
0.0 nil
3618+
(lambda ()
3619+
(when (lsp-buffer-live-p buffer)
3620+
(lsp-with-current-buffer buffer
3621+
(lsp--on-change-debounce buffer)
3622+
(lsp--on-idle buffer)))))))
3623+
(t
3624+
(lsp-unconfig-buffer)
3625+
(remove-function (local 'eldoc-documentation-function) #'lsp-eldoc-function)
3626+
3627+
(remove-hook 'post-command-hook #'lsp--post-command t)
3628+
(remove-hook 'after-change-functions #'lsp-on-change t)
3629+
(remove-hook 'after-revert-hook #'lsp-on-revert t)
3630+
(remove-hook 'after-save-hook #'lsp-on-save t)
3631+
(remove-hook 'auto-save-hook #'lsp--on-auto-save t)
3632+
(remove-hook 'before-change-functions #'lsp-before-change t)
3633+
(remove-hook 'before-save-hook #'lsp--before-save t)
3634+
(remove-hook 'kill-buffer-hook #'lsp--text-document-did-close t)
3635+
3636+
(lsp--update-on-type-formatting-hook :cleanup)
3637+
(lsp--update-signature-help-hook :cleanup)
3638+
3639+
(when lsp--on-idle-timer
3640+
(cancel-timer lsp--on-idle-timer)
3641+
(setq lsp--on-idle-timer nil))
3642+
3643+
(remove-hook 'lsp-on-idle-hook #'lsp--document-links t)
3644+
(remove-hook 'lsp-on-idle-hook #'lsp--document-highlight t)
3645+
3646+
(lsp--remove-overlays 'lsp-highlight)
3647+
(lsp--remove-overlays 'lsp-links)
3648+
3649+
(remove-hook 'xref-backend-functions #'lsp--xref-backend t))))
36503650

36513651
(defun lsp-configure-buffer ()
36523652
"Configure LSP features for current buffer."
@@ -6606,6 +6606,8 @@ returns the command to execute."
66066606
(add-hook 'lsp-configure-hook 'lsp-modeline-code-actions-mode))
66076607
(when lsp-modeline-diagnostics-enable
66086608
(add-hook 'lsp-configure-hook 'lsp-modeline-diagnostics-mode))
6609+
(when lsp-modeline-workspace-status-enable
6610+
(add-hook 'lsp-configure-hook 'lsp-modeline-workspace-status-mode))
66096611
(when lsp-lens-enable
66106612
(add-hook 'lsp-configure-hook 'lsp-lens-mode))
66116613

lsp-modeline.el

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
(declare-function all-the-icons-octicon "ext:all-the-icons" t t)
6363
(declare-function lsp-treemacs-errors-list "ext:lsp-treemacs" t)
6464

65+
6566
;; code actions
6667

6768
(defvar-local lsp-modeline--code-actions-string nil
@@ -193,7 +194,6 @@
193194
(setq global-mode-string (remove '(t (:eval lsp-modeline--code-actions-string)) global-mode-string)))))
194195

195196

196-
197197
;; diagnostics
198198

199199
(defvar-local lsp-modeline--diagnostics-string nil
@@ -303,5 +303,38 @@ The `:global' workspace is global one.")
303303
(remove-hook 'lsp-diagnostics-updated-hook 'lsp-modeline--diagnostics-reset-modeline-cache)
304304
(setq global-mode-string (remove '(t (:eval (lsp-modeline--diagnostics-update-modeline))) global-mode-string)))))
305305

306+
307+
;; workspace status
308+
309+
(defun lsp-modeline--workspace-status-string ()
310+
"Build the workspace status string."
311+
'(t (:eval (-keep #'lsp--workspace-status-string (lsp-workspaces)))))
312+
313+
(defun lsp-modeline--enable-workspace-status ()
314+
"Enable workspace status on modeline."
315+
(let ((status (lsp-modeline--workspace-status-string)))
316+
(setq-local global-mode-string (if (-contains? global-mode-string status)
317+
global-mode-string
318+
(cons status global-mode-string)))))
319+
320+
(defun lsp-modeline--disable-workspace-status ()
321+
"Disable workspace status on modeline."
322+
(let ((status (lsp-modeline--workspace-status-string)))
323+
(setq-local global-mode-string (remove status global-mode-string))))
324+
325+
;;;###autoload
326+
(define-minor-mode lsp-modeline-workspace-status-mode
327+
"Toggle workspace status on modeline."
328+
:group 'lsp-mode
329+
:global nil
330+
:lighter ""
331+
(cond
332+
(lsp-modeline-workspace-status-mode
333+
(add-hook 'lsp-configure-hook #'lsp-modeline--enable-workspace-status nil t)
334+
(add-hook 'lsp-unconfigure-hook #'lsp-modeline--disable-workspace-status nil t))
335+
(t
336+
(remove-hook 'lsp-configure-hook #'lsp-modeline--enable-workspace-status t)
337+
(remove-hook 'lsp-unconfigure-hook #'lsp-modeline--disable-workspace-status t))))
338+
306339
(provide 'lsp-modeline)
307340
;;; lsp-modeline.el ends here

0 commit comments

Comments
 (0)