In order for this to scale, I need to solve two things: 1. Ad-hoc ignore fill-column rules for URLs and other exceptions. 2. Run Elisp flychecker without evaluating my Elisp code and firing its side-effects.
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
| ;;; modeline.el --- Customize my mode-line -*- lexical-binding: t -*-
 | |
| 
 | |
| ;; Author: William Carroll <wpcarro@gmail.com>
 | |
| ;; Version: 0.0.1
 | |
| ;; Package-Requires: ((emacs "25.1"))
 | |
| ;; Homepage: https://user.git.corp.google.com/wpcarro/briefcase
 | |
| 
 | |
| ;;; 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.
 | |
| 
 | |
| ;;; Code:
 | |
| 
 | |
| (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 ()
 | |
|   "Conditionally renders the `mode-line-misc-info' string.
 | |
| 
 | |
|   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
 |