tvl-depot/emacs/.emacs.d/wpc/modeline.el
William Carroll 7d9cfdbc41 Prefer telephone-line to doom-modeline
After growing frustrated with doom-modeline's compatibility with my EXWM setup,
I decided to borrow @tazjin's setup, which I find to be much more appealing.
2020-07-06 11:11:08 +01:00

64 lines
2.8 KiB
EmacsLisp

;;; modeline.el --- Customize my Emacs mode-line -*- lexical-binding: t -*-
;; Author: William Carroll <wpcarro@gmail.com>
;;; Commentary:
;; Because I use EXWM, I treat my Emacs mode-line like my system bar: I need to
;; quickly check the system time, and I expect it to be at the bottom-right of
;; my Emacs frame. I used doom-modeline for awhile, which is an impressive
;; package, but it conditionally colorizes on the modeline for the active
;; buffer. So if my bottom-right window is inactive, I cannot see the time.
;;
;; My friend, @tazjin, has a modeline setup that I think is more compatible with
;; EXWM, so I'm going to base my setup off of his.
(use-package telephone-line)
(defun modeline/bottom-right-window? ()
"Determines whether the last (i.e. bottom-right) window of the
active frame is showing the buffer in which this function is
executed."
(let* ((frame (selected-frame))
(right-windows (window-at-side-list frame 'right))
(bottom-windows (window-at-side-list frame 'bottom))
(last-window (car (seq-intersection right-windows bottom-windows))))
(eq (current-buffer) (window-buffer last-window))))
(defun modeline/maybe-render-time ()
"Renders the mode-line-misc-info string for display in the
mode-line if the currently active window is the last one in the
frame.
The idea is to not display information like the current time,
load, battery levels on all buffers."
(when (modeline/bottom-right-window?)
(telephone-line-raw mode-line-misc-info t)))
(defun modeline/setup ()
"Render my custom modeline."
(telephone-line-defsegment telephone-line-last-window-segment ()
(modeline/maybe-render-time))
;; Display the current EXWM workspace index in the mode-line
(telephone-line-defsegment telephone-line-exwm-workspace-index ()
(when (modeline/bottom-right-window?)
(format "[%s]" exwm-workspace-current-index)))
;; Define a highlight font for ~ important ~ information in the last
;; window.
(defface special-highlight '((t (:foreground "white" :background "#5f627f"))) "")
(add-to-list 'telephone-line-faces
'(highlight . (special-highlight . special-highlight)))
(setq telephone-line-lhs
'((nil . (telephone-line-position-segment))
(accent . (telephone-line-buffer-segment))))
(setq telephone-line-rhs
'((accent . (telephone-line-major-mode-segment))
(nil . (telephone-line-last-window-segment
telephone-line-exwm-workspace-index))))
(setq telephone-line-primary-left-separator 'telephone-line-tan-left
telephone-line-primary-right-separator 'telephone-line-tan-right
telephone-line-secondary-left-separator 'telephone-line-tan-hollow-left
telephone-line-secondary-right-separator 'telephone-line-tan-hollow-right)
(telephone-line-mode 1))
(provide 'modeline)
;; modeline.el ends here