irc: add new segment to display the unread buffers

This includes a configuration variable that allows the user to customize
the display of the name. The segment is only displayed in the 'special
modeline due to space. Later, we'll add a irc notification for the 'main
modeline.
This commit is contained in:
Sean Farley 2019-02-01 15:55:14 -08:00
parent 3d7e46038b
commit b6b6691ea3
3 changed files with 46 additions and 1 deletions

View file

@ -122,6 +122,11 @@ The icons may not be showed correctly in terminal and on Windows.")
(defvar doom-modeline-mu4e t (defvar doom-modeline-mu4e t
"Whether display mu4e notifications or not. Requires `mu4e-alert' package.") "Whether display mu4e notifications or not. Requires `mu4e-alert' package.")
(defvar doom-modeline-irc t
"Whether display irc notifications or not. Requires `circe' package.")
(defvar doom-modeline-irc-stylize 'identity
"Function to stylize the irc buffer names.")
;; ;;
;; Custom faces ;; Custom faces

View file

@ -71,6 +71,7 @@
(defvar winum-auto-setup-mode-line) (defvar winum-auto-setup-mode-line)
(defvar xah-fly-insert-state-q) (defvar xah-fly-insert-state-q)
(defvar mu4e-alert-mode-line) (defvar mu4e-alert-mode-line)
(defvar tracking-buffers)
(declare-function anzu--reset-status 'anzu) (declare-function anzu--reset-status 'anzu)
(declare-function anzu--where-is-here 'anzu) (declare-function anzu--where-is-here 'anzu)
@ -130,6 +131,7 @@
(declare-function winum--clear-mode-line 'winum) (declare-function winum--clear-mode-line 'winum)
(declare-function winum--install-mode-line 'winum) (declare-function winum--install-mode-line 'winum)
(declare-function winum-get-number-string 'winum) (declare-function winum-get-number-string 'winum)
(declare-function tracking-shorten 'tracking)
;; ;;
@ -1519,6 +1521,44 @@ mouse-1: Toggle Debug on Quit"
"You have an unread email" "You have an unread email"
(format "You have %s unread emails" mu4e-alert-mode-line))))) (format "You have %s unread emails" mu4e-alert-mode-line)))))
;;
;; irc notifications
;;
(defun doom-modeline--shorten-irc (name)
"Wrapper for `tracking-shorten' that only takes one NAME.
One key difference is that when `tracking-shorten' returns nil we
will instead return the original value of name. This is necessary
in cases where the user has stylized the name to be an icon and
we don't want to remove that so we just return the original."
(or (car (tracking-shorten (list name)))
name))
(defun doom-modeline--tracking-buffers (buffers)
"Logic to convert some irc BUFFERS to their font-awesome icon."
(mapconcat
(lambda (b)
(propertize
(doom-modeline--shorten-irc (funcall doom-modeline-irc-stylize b))
'face '(:inherit (warning doom-modeline-unread-number))
'help-echo b))
buffers
;; `space-width' only affects the width of the spaces here, so we can tighten
;; it to be a bit more compact
(propertize " · " 'display '(space-width 0.4))))
;; create a modeline segment that contains all the irc tracked buffers
(doom-modeline-def-segment irc-buffers
"The list of shortened, unread irc buffers."
(when (and doom-modeline-irc
(boundp 'tracking-mode-line-buffers)
(doom-modeline--active)
(derived-mode-p 'circe-mode))
;; add a space at the end to pad against the following segment
(concat " " (doom-modeline--tracking-buffers tracking-buffers) " ")))
(provide 'doom-modeline-segments) (provide 'doom-modeline-segments)
;;; doom-modeline-segments.el ends here ;;; doom-modeline-segments.el ends here

View file

@ -92,7 +92,7 @@
(doom-modeline-def-modeline 'special (doom-modeline-def-modeline 'special
'(bar window-number evil-state god-state ryo-modal xah-fly-keys matches buffer-info-simple buffer-position parrot selection-info) '(bar window-number evil-state god-state ryo-modal xah-fly-keys matches buffer-info-simple buffer-position parrot selection-info)
'(misc-info lsp debug minor-modes input-method buffer-encoding major-mode process checker)) '(misc-info lsp debug minor-modes input-method irc-buffers buffer-encoding major-mode process checker))
(doom-modeline-def-modeline 'project (doom-modeline-def-modeline 'project
'(bar " " buffer-default-directory) '(bar " " buffer-default-directory)