Separate functions getting memory info for Darwin and NetBSD systems

Fixes #17
This commit is contained in:
Lucien Cartier-Tilet 2022-01-04 19:33:04 +01:00
parent d248447cb0
commit 20d0682f39
Signed by: phundrak
GPG Key ID: BD7789E705CB8DCA

View File

@ -2,7 +2,7 @@
;; Author: Lucien Cartier-Tilet <lucien@phundrak.com> ;; Author: Lucien Cartier-Tilet <lucien@phundrak.com>
;; Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com> ;; Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com>
;; Version: 0.8.1 ;; Version: 0.8.2
;; Package-Requires: ((emacs "25.1") (f "0.20") (s "1")) ;; Package-Requires: ((emacs "25.1") (f "0.20") (s "1"))
;; Homepage: https://github.com/Phundrak/eshell-info-banner.el ;; Homepage: https://github.com/Phundrak/eshell-info-banner.el
@ -467,21 +467,19 @@ For TEXT-PADDING and BAR-LENGTH, see the documentation of
"\n" "\n"
t))) t)))
(defun eshell-info-banner--get-memory-unix () (defun eshell-info-banner--get-memory-unix-command-to-mem (command)
"Get memory usage for UNIX systems.
Compatible with Darwin and FreeBSD at least."
(let* ((command-to-mem (lambda (command)
(string-to-number (string-to-number
(s-trim (s-trim
(car (last (car (last
(split-string (eshell-info-banner--shell-command-to-string command) (split-string (eshell-info-banner--shell-command-to-string command)
" " " "
t))))))) t))))))
(netbsdp (and (equal system-type 'berkeley-unix)
(string-match-p "NetBSD" (eshell-info-banner--shell-command-to-string "uname")))) (defun eshell-info-banner--get-memory-netbsd ()
(total (apply command-to-mem `(,(if netbsdp "sysctl hw.physmem64" "sysctl hw.physmem")))) "Get memory usage for NetBSD systems.
(used (if netbsdp See `eshell-info-banner--get-memory'."
(- total (let* ((total (eshell-info-banner--get-memory-unix-command-to-mem `("sysctl hw.physmem64")))
(used (- total
(* 1024 (string-to-number (* 1024 (string-to-number
(s-trim (s-trim
(with-temp-buffer (with-temp-buffer
@ -496,10 +494,52 @@ Compatible with Darwin and FreeBSD at least."
(buffer-string)) (buffer-string))
(substring-no-properties (buffer-string) (substring-no-properties (buffer-string)
(match-beginning 1) (match-beginning 1)
(match-end 1)))))))) (match-end 1))))))))))
(apply command-to-mem '("sysctl hw.usermem")))))
`(("RAM" ,total ,used)))) `(("RAM" ,total ,used))))
(defun eshell-info-banner--get-memory-darwin ()
"Get memory usage for Darwin systems.
See `eshell-info-banner--get-memory'."
(let* ((total (eshell-info-banner--get-memory-unix-command-to-mem "sysctl -n hw.memsize"))
(vmstat (with-temp-buffer
(call-process "vm_stat" nil t nil)
(buffer-string)))
(wired (save-match-data
(string-match (rx " wired" (* (not digit)) (+ blank) (group (+ digit)) ".")
vmstat)
(* 1024 4
(string-to-number (substring-no-properties vmstat
(match-beginning 1)
(match-end 1))))))
(active (save-match-data
(string-match (rx " active" (* (not digit)) (+ blank) (group (+ digit)) ".")
vmstat)
(* 1024 4
(string-to-number (substring-no-properties vmstat
(match-beginning 1)
(match-end 1))))))
(compressed (save-match-data
(if (string-match (rx " occupied" (* (not digit)) (+ blank) (group (+ digit)) ".")
vmstat)
(* 1024 4
(string-to-number (substring-no-properties vmstat
(match-beginning 1)
(match-end 1))))
0))))
`(("RAM" ,total ,(+ wired active compressed)))))
(defun eshell-info-banner--get-memory-unix ()
"Get memory usage for UNIX systems."
(cond ((and (equal system-type 'berkeley-unix)
(string-match-p "NetBSD" (eshell-info-banner--shell-command-to-string "uname")))
(eshell-info-banner--get-memory-netbsd))
((equal system-type 'darwin)
(eshell-info-banner--get-memory-darwin))
(t
(let* ((total (eshell-info-banner--get-memory-unix-command-to-mem "sysctl hw.physmem"))
(used (eshell-info-banner--get-memory-unix-command-to-mem "sysctl hw.usermem")))
`(("RAM" ,total ,used))))))
(defun eshell-info-banner--get-memory-windows () (defun eshell-info-banner--get-memory-windows ()
"Get memory usage for Window." "Get memory usage for Window."
(warn "Memory usage not yet implemented for Windows and DOS") (warn "Memory usage not yet implemented for Windows and DOS")