diff options
| -rw-r--r-- | emacs/inits/00-exwm.el | 30 | ||||
| -rw-r--r-- | emacs/inits/02-modeline.el | 133 |
2 files changed, 103 insertions, 60 deletions
diff --git a/emacs/inits/00-exwm.el b/emacs/inits/00-exwm.el index 4d503f5..8d9caa7 100644 --- a/emacs/inits/00-exwm.el +++ b/emacs/inits/00-exwm.el @@ -1,4 +1,4 @@ -;; Time-stamp: <2020-04-24 17:52:54 (tslil@bison)> +;; Time-stamp: <2020-04-26 20:34:40 (tslil@bison)> (defun banish-rat () (interactive) @@ -67,25 +67,35 @@ ;; buffer and window management (exwm-input-set-key (kbd "s-SPC") 'switch-to-buffer) - (defvar exwm-workspace-last-index 0) + (defvar exwm-workspace-last-idx 0) + (defvar exwm-workspace-current-idx 0) - (defun exwm-workspace-lighter () - (format " @%d (*%d)" exwm-workspace-current-index exwm-workspace-last-index)) + (defvar exwm-workspace-lighter "") - (defun exwm-store-workspace-last-index-switch (frame-or-index &optional force) - (setq exwm-workspace-last-index exwm-workspace-current-index)) + (defun exwm-update-workspace-lighter () + (setq exwm-workspace-lighter (format "@%d (*%d)" exwm-workspace-current-idx exwm-workspace-last-idx))) - (advice-add 'exwm-workspace-switch :before #'exwm-store-workspace-last-index-switch) + (defun exwm-workspace-track-changes (frame-or-index &optional ignored) + (when (/= exwm-workspace-current-index exwm-workspace-current-idx) + (setq exwm-workspace-last-idx exwm-workspace-current-idx + exwm-workspace-current-idx exwm-workspace-current-index) + (exwm-update-workspace-lighter))) + + (exwm-update-workspace-lighter) + + (advice-add 'exwm-workspace-switch :after #'exwm-workspace-track-changes) + (advice-add 'exwm-workspace-switch-create :after #'exwm-workspace-track-changes) (defun exwm-sanitise-workspace-last-index () - (when (> (1+ exwm-workspace-last-index) (exwm-workspace--count)) - (setq exwm-workspace-last-index exwm-workspace-current-index))) + (when (> (1+ exwm-workspace-last-idx) (exwm-workspace--count)) + (setq exwm-workspace-last-idx exwm-workspace-current-idx) + (exwm-update-workspace-lighter))) (push #'exwm-sanitise-workspace-last-index exwm-workspace-list-change-hook) (defun exwm-last-workspace () (interactive) - (exwm-workspace-switch-create exwm-workspace-last-index)) + (exwm-workspace-switch exwm-workspace-last-idx)) (defun exwm-last-buffer () (interactive) diff --git a/emacs/inits/02-modeline.el b/emacs/inits/02-modeline.el index bae0a37..9df8889 100644 --- a/emacs/inits/02-modeline.el +++ b/emacs/inits/02-modeline.el @@ -1,9 +1,67 @@ -;; Time-stamp: <2020-04-24 17:53:33 (tslil@bison)> +;; Time-stamp: <2020-04-26 20:33:20 (tslil@bison)> ;; ----------------------------------------------------------------------------- -;; Battery status and CPU temperature +;; Mode-line +;; +;; The mode-line is set to eliminate duplicate information between buffers. +;; Everything else is intended to be displayed in another, centralised location. + +(setq display-time-format "%d/%H.%M" + display-time-default-load-average nil) +(display-time-mode 1) + +(setq global-mode-string nil) +(setq-default mode-line-format + '("" mode-line-front-space + mode-line-modified "%@" + " %l:%c %[" mode-line-buffer-identification "%] %I" + " " mode-line-modes ;; (vc-mode vc-mode) + (:eval (abbreviate-file-name default-directory)) + mode-line-misc-info mode-line-end-spaces)) + +;; ----------------------------------------------------------------------------- +;; System information +;; +;; If running under exwm with its system tray, then put the clock and workspace +;; indicator in a posfrmae as provided by statusbar.el. Othewrise, use +;; minibuffer-line as the central location. + +(if (fboundp 'exwm-systemtray-enable) + (progn + ;; ----------------------------------------------------------------------------- + ;; Statusbar.el + (add-to-list 'load-path (expand-file-name "~/.emacs.d/scripts/statusbar.el/")) + (use-package posframe :ensure t) + (use-package statusbar + :config + (advice-add 'exwm-update-workspace-lighter :after #'statusbar-refresh) + (setq statusbar-modeline-variables '(exwm-workspace-lighter display-time-string)) + (statusbar-mode 1) + (exwm-update-workspace-lighter))) + ;; ----------------------------------------------------------------------------- + ;; Not running under EXWM, use minibuffer-line + ;; + ;; First we define two ``modules'' for use in the mode-line + + ;; ----------------------------------------------------------------------------- + ;; Remind me of my mortality + + (defvar my-mortality "") + + (defun my-mortality-update () + (setq my-mortality + (format "%.4f" + (/ (float-time + (time-subtract (current-time) + (encode-time 0 0 0 DAY MONTH YEAR))) + (* 60 60 24 364.25))))) + + + (defvar my-mortality-update-timer (run-at-time nil (* 60 60) 'my-mortality-update)) + + ;; ----------------------------------------------------------------------------- + ;; Battery status and CPU temperature -(unless (fboundp 'exwm-systemtray-enable) (defvar sys-status "") (defvar sys-status-cpu-temp-threshold "45") @@ -21,56 +79,31 @@ (defun sys-status-update () (setq sys-status (linux-sys-status))) - (defvar sys-status-update-timer (run-at-time nil 60 'sys-status-update))) - - -;; ----------------------------------------------------------------------------- -;; Remind me of my mortality - -(defun mortality () - (format " %.4f" - (/ (float-time - (time-subtract (current-time) - (encode-time 0 0 0 DAY MONTH YEAR))) - (* 60 60 24 364.25)))) + (defvar sys-status-update-timer (run-at-time nil 60 'sys-status-update)) -;; ----------------------------------------------------------------------------- -;; Mode-line and minibuffer defaults + ;; ----------------------------------------------------------------------------- + ;; Minibuffer-line -(use-package minibuffer-line - :ensure t - :config - (setq minibuffer-line-refresh-interval 60 - minibuffer-line-format - '("" (:eval (format-time-string "%d/%H.%M")) - display-time-string - (sys-status sys-status) - (:eval (mortality)) - (:eval (when (functionp 'exwm-workspace-lighter) (exwm-workspace-lighter))) - " " (:eval (abbreviate-file-name default-directory)))) - ;; We redefine this function to centre the text - ;; Is there a better way? - (defun minibuffer-line--update () - (with-current-buffer minibuffer-line--buffer - (erase-buffer) - (insert (format-mode-line minibuffer-line-format 'minibuffer-line)) - (setq fill-column (frame-width)) - (center-line))) - (minibuffer-line-mode 1) - - (when (symbolp exwm-workspace-switch-hook) - (push #'minibuffer-line--update exwm-workspace-switch-hook))) - -;; really want to hook buffer changes at all, and focus -(add-hook 'minibuffer-exit-hook #'minibuffer-line--update) + (use-package minibuffer-line + :ensure t + :config + (setq minibuffer-line-refresh-interval 60 + minibuffer-line-format + '("" display-time-string " " my-mortality sys-status)) + ;; We redefine this function to centre the text + ;; Is there a better way? + (defun minibuffer-line--update () + (with-current-buffer minibuffer-line--buffer + (erase-buffer) + (insert (format-mode-line minibuffer-line-format 'minibuffer-line)) + (setq fill-column (frame-width)) + (center-line))) + (minibuffer-line-mode 1) -(setq global-mode-string nil) -(setq-default mode-line-format - '("" mode-line-front-space - mode-line-modified "%@" - " %l:%c %[" mode-line-buffer-identification "%] %I" - " " mode-line-modes ;; (vc-mode vc-mode) - mode-line-misc-info mode-line-end-spaces)) + (when (symbolp exwm-workspace-switch-hook) + (push #'minibuffer-line--update exwm-workspace-switch-hook))) + ;; really want to hook buffer changes at all, and focus + (add-hook 'minibuffer-exit-hook #'minibuffer-line--update)) ;; ----------------------------------------------------------------------------- ;; Minions to clean mode-line |
