(provide 'single-header) (defvar single-header--current-header-buffer nil "Read the name") (defvar single-header-format '(make-header-info-string) "evaluated to fill the header") (defface single-header '((default . (:background "#000000" :family "Source Code Pro"))) "Face for top line") (require 'battery) (defun with-face (str &rest face-plist) (add-face-text-property 0 (length str) face-plist t str) str) (defun make-header-info-string () "generates the mode line string that contains all the info to the right" (let ((str (concat (with-face (battery-format "[%b%p%%] " (and battery-status-function (funcall battery-status-function))) :weight 'bold) (with-face (let* ((mi (memory-info)) (tm (float (car mi))) (fm (float (cadr mi))) (ts (float (caddr mi))) (fs (float (cadddr mi)))) (format "{%.2f %.2f} " (- 1 (/ fm tm)) (- 1 (/ fs ts)))) :foreground "#00ced1") (with-face (format "<%03.2f> " (car (load-average 1))) :foreground "#da70d6") (format-time-string "%a, %b %+4Y-%0m-%0d ") (with-face (format-time-string "%R") :weight 'bold) ))) (setq str (concat (make-string (- (window-max-chars-per-line (minibuffer-window) 'single-header) (length str)) ? ) str)) (with-face str 'single-header))) (defun single-header-init-buffer (buf) (with-current-buffer buf (insert "header test") (jit-lock-mode nil) (font-lock-mode -1) (buffer-disable-undo) (setq-local mode-line-format nil) (setq-local header-line-format nil) (setq-local cursor-type nil) (setq-local cursor-in-non-selected-windows nil) (setq-local overflow-newline-into-fringe nil) (setq-local word-wrap nil) (setq-local show-trailing-whitespace nil))) (defun single-header-init-window (win) (with-selected-window win (set-window-dedicated-p win t) (set-window-parameter win 'no-other-window t) (set-window-parameter win 'no-delete-other-windows t) (set-window-margins win 0 0) (set-window-fringes win 0 0) (set-window-scroll-bars win 0 nil 0 nil) (setq-local window-min-height 1) (setq-local window-safe-min-height 1) (let (window-size-fixed) (fit-window-to-buffer win 1)) (setq-local window-size-fixed t) (when (fboundp 'window-preserve-size) (window-preserve-size win nil t)))) (defun single-header-show (buf) "show / make a header" (if (buffer-live-p buf) (let ((win (display-buffer-in-side-window buf '((side . top) (slot . -100))))) (single-header-init-window win)) (single-header-make))) (defun single-header-make () "create the fake header line" (interactive) (unless (buffer-live-p single-header--current-header-buffer) (let ((buf (generate-new-buffer "*header*"))) (single-header-init-buffer buf) (setq single-header--current-header-buffer buf) (single-header-show buf)))) (defun single-header-delete () "remove an existing header buffer" (interactive) (when (buffer-live-p single-header--current-header-buffer) (kill-buffer single-header--current-header-buffer))) (defun single-header-update () "update the contents of the header line according to `single-header-format'" (when (buffer-live-p single-header--current-header-buffer) (with-current-buffer single-header--current-header-buffer (erase-buffer) (insert (eval single-header-format))) ;; (when exwm-state ;; (exwm-input--set-active-window ;; (or (frame-parameter exwm-workspace--current 'exwm-outer-id) ;; xcb:Window:None))) )) (add-hook 'after-make-frame-functions (lambda (frame) (with-selected-frame frame (single-header-show single-header--current-header-buffer)))) ;; (use-package lv ;; :custom ((lv-use-separator . nil))) ;; do init frame seperately (single-header-show single-header--current-header-buffer) (setq single-header--timer nil) (unless single-header--timer (setq single-header--timer (run-with-timer 0 3 'single-header-update)))