blob: d8a8630706f1965bb14ce99ad925b00ee99f6b56 (
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
|
(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 ((win (when (buffer-live-p single-header--current-header-buffer)
(get-buffer-window single-header--current-header-buffer)))
(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 (car (cdr mi))))
(ts (float (car (cdr (cdr mi)))))
(fs (float (car (cdr (cdr (cdr 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
(cond (win (make-string
(- (window-max-chars-per-line win 'single-header) (length str)) ? ))
(t ""))
))
(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)))))
;; (add-hook 'after-make-frame-functions (lambda (frame)
;; (with-selected-frame frame
;; (single-header-show single-header--current-header-buffer))))
;; do init frame seperately
(single-header-show single-header--current-header-buffer)
(run-with-timer 1 1 'single-header-update)
|