forked from alezost/stumpwm-config
-
Notifications
You must be signed in to change notification settings - Fork 0
/
mode-line-thermal.lisp
71 lines (59 loc) · 2.52 KB
/
mode-line-thermal.lisp
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
;;; mode-line-thermal.lisp --- Thermal zones info for the mode line
;; Copyright © 2007 Anonymous Coward, Jonathan Moore Liles
;; Copyright © 2019 Alex Kost <alezost@gmail.com>
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; This file originates from
;; <https://github.com/stumpwm/stumpwm-contrib/blob/master/modeline/cpu>.
;; Documentation on "/sys/class/thermal/*" can be found at:
;; <https://github.com/torvalds/linux/blob/master/Documentation/thermal/sysfs-api.txt>
;;; Code:
(defpackage #:al/stumpwm-thermal
(:use :common-lisp
:stumpwm)
(:export #:all-thermal-zones
#:thermal-zones-mode-line-string))
(in-package #:al/stumpwm-thermal)
(defun all-thermal-zones ()
"Return a list of files of all thermal zones."
(remove nil
(mapcar (lambda (dir)
(when (ppcre:scan "thermal_zone" (namestring dir))
(let ((file (make-pathname
:directory (pathname-directory dir)
:name "temp")))
(and (al/file-readable? file)
file))))
(list-directory #P"/sys/class/thermal/"))))
(defun thermal-zone-temperature (zone)
"Return temperature of a thermal ZONE file."
(round (/ (al/read-sys-file zone t)
1000)))
(defun thermal-zones-mode-line-string (&rest zones)
"Return a string with thermal ZONES info suitable for the mode-line."
(if (null zones)
""
(concat
"^[^b^7*"
(if (cdr zones) ; not a single zone
(apply #'concat
"°C:"
(mapcar (lambda (zone)
(format nil " ~D"
(thermal-zone-temperature zone)))
zones))
(format nil "~D°C"
(thermal-zone-temperature (car zones))))
"^]")))
;;; mode-line-thermal.lisp ends here