Created
September 4, 2019 11:04
-
-
Save TatriX/a48cb598cbd19f4b6b2c912757d0646e to your computer and use it in GitHub Desktop.
Pure Elisp panel for EXWM
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defun my-setup-header-line-format () | |
"Hide header line if required." | |
(set-window-parameter (next-window) 'header-line-format | |
(unless (window-at-side-p (next-window) 'top) | |
'none))) | |
(add-hook 'exwm-update-class-hook #'my-setup-header-line-format) | |
(set-face-attribute 'header-line nil | |
:background "#000000" | |
:foreground "#cccccc" | |
:height 100) | |
;; See https://github.com/TatriX/good-line | |
(defun good-line-format (left right) | |
"Return a string of `window-width' length containing LEFT and RIGHT, aligned respectively." | |
(let ((reserve (length right))) | |
(when (and (display-graphic-p) (eq 'right (get-scroll-bar-mode))) | |
(setq reserve (- reserve 3))) | |
(concat | |
left | |
" " | |
(propertize " " | |
'display `((space :align-to (- (+ right right-fringe right-margin) ,(+ reserve 0))))) | |
right))) | |
(setq display-time-default-load-average nil) | |
(setq display-time-interval 1) | |
(setq display-time-format "%a %d/%m/%Y %H:%M:%S") | |
(display-time-mode 1) | |
(setq-default header-line-format | |
'(:eval (good-line-format | |
;; Left | |
(when | |
(and (window-at-side-p nil 'top) | |
(window-at-side-p nil 'left)) | |
(format " [%s]" exwm-workspace-current-index)) | |
;; Right | |
(when (and (window-at-side-p nil 'top) | |
(window-at-side-p nil 'right)) | |
(format "CPU %s | MEM %s |%s| %s" | |
(let ((cpu (format "%02d%%%%" my-cpu-usage))) | |
(if (> my-cpu-usage 75) | |
(propertize cpu 'font-lock-face '(:foreground "#ff2222")) | |
cpu)) | |
(let* ((used (car my-mem-usage)) | |
(total (cdr my-mem-usage)) | |
(mem (format "%.2f/%.2f" used total))) | |
(if (> (/ used total) 0.75) | |
(propertize mem 'font-lock-face '(:foreground "#ff2222")) | |
mem)) | |
telega-mode-line-string | |
display-time-string))))) | |
;; Install "systat" package via yor distro package manager | |
(defvar my-cpu-usage 0 | |
"Current CPU usage percent.") | |
(defun my-start-cpu-usage-process () | |
"Start `mstat' process updating `my-cpu-usage' variable." | |
(when-let ((old-process (get-process "mpstat"))) | |
(kill-process old-process)) | |
(make-process :name "mpstat" | |
:command '("mpstat" "2") | |
:connection-type 'pipe | |
:filter (lambda (process output) | |
(let* ((last-column (car (last (split-string output)))) | |
(idle (cl-parse-integer last-column :junk-allowed t))) | |
(when idle | |
(setq my-cpu-usage (- 100 idle))))))) | |
(my-start-cpu-usage-process) | |
(defvar my-mem-usage '(0 . 0) | |
"Current MEM usage in GB (used . free).") | |
(defun my-start-mem-usage-process () | |
"Start `free' process updating `my-cpu-usage' variable." | |
(when-let ((old-process (get-process "free"))) | |
(kill-process old-process)) | |
(make-process :name "free" | |
:command '("free" "--mebi" "-s" "2") | |
:connection-type 'pipe | |
:filter (lambda (process output) | |
(let ((columns (split-string output))) | |
(let ((total (string-to-number (nth 7 columns))) | |
(used (string-to-number (nth 8 columns))) | |
(shared (string-to-number (nth 10 columns)))) | |
(setq my-mem-usage (cons (/ (+ used shared) 1024.0) | |
(/ total 1024.0)))))))) | |
(my-start-mem-usage-process) | |
(add-hook 'window-configuration-change-hook #'my-setup-header-line-format) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment