blob: da57426ae34ef539070408558e0534ae2ef69024 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
(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
(format-time-string "%a, %b %+4Y-%0m-%0d ")
(with-face (format-time-string "%R ")
:weight 'bold)
(with-face (format "<%03.2f> " (car (load-average 1)))
:foreground "#da70d6")
(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 (battery-format "[%b%p%%] " (and battery-status-function (funcall battery-status-function)))
:weight 'bold)
)))
(setq str (concat str
(make-string
(- (window-max-chars-per-line (minibuffer-window) 'single-header)
(length 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)))
|