9 Commits
0.8.0 ... 0.8.4

Author SHA1 Message Date
f59a472204 Fix erroneous function call on NetBSD 2022-01-07 02:04:31 +01:00
f9113b7a35 Improve functions documentation 2022-01-07 02:03:44 +01:00
d145705a61 Update screenshot 2022-01-05 19:24:55 +01:00
9e6fecc94a Fix battery detection for non-Linux systems
Some non-Linux systems do not have a `/sys/` directory. Therefore,
check it only if we are in a Linux system.

Fixes #19
2022-01-05 19:02:05 +01:00
20d0682f39 Separate functions getting memory info for Darwin and NetBSD systems
Fixes #17
2022-01-04 20:00:52 +01:00
d248447cb0 Add macOS versions
Add support for Mac OS X 10.0 to 10.4
Add support for macOS Monterey
2021-12-21 10:44:47 +01:00
36b964a993 Merge fix/locale-non-posix-shells into master
commit 8a18bcd346fc146e104f77d3a3362a52db210bc3
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Tue Dec 21 00:06:45 2021 +0100

    Change `eshell-info-banner--shell-command-to-string' to function

    `eshell-info-banner--shell-command-to-string' being a macro causes
    problems in at least `eshell-info-banner--get-memory-unix'.
    This commit makes `eshell-info-banner--shell-command-to-string' a
    regular function.

commit 981b42c3f530a314990b0d69a6efa9f0bb4957dc
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Mon Dec 20 23:29:17 2021 +0100

    Fix variables preceeding commands on non-POSIX shells

    This commit introduces a fix to run commands only on POSIX-compliant
    shells defined in the new constant `eshell-info-banner--posix-shells'.
    If any is found on the machine, the command will be run through it,
    otherwise it will default to `sh'.

commit 364e0f5189471ca3d568638144c208a255808e76
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Mon Dec 20 23:12:15 2021 +0100

    Fix setting locale when the default shell is non-POSIX compliant

    In some cases, the default shell does not accept any environment
    variables preceeding the command, such as:

        LANG=C uptime

    For instance, tcsh on DragonFly BSD reports

        LANG=C: Command not found.

    This commit makes the command run on bash, zsh, or sh.
2021-12-21 00:12:41 +01:00
661ae7c87d Remove REMOTE arg from `eshell-info-banner--executable-find'
`eshell-info-banner--executable-find' now only acts according to the
user’s preferences set with `eshell-info-banner-tramp-aware'.
2021-12-20 23:11:44 +01:00
382bb55064 Add support for RAM detection in NetBSD
Squashed commit of the following:

commit e11e3cbbd04c9c693d6e48f72e9ea99b64a83556
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Sun Dec 19 18:34:09 2021 +0100

    Multiply by 2014 to go from Kilobytes to Bytes

commit 786c9bbfdfd8a1fc6d6b21ea92ac8252b9dd0a50
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Sun Dec 19 18:23:21 2021 +0100

    Read in /proc/meminfo to get used/available memory

    Apparently NetBSD doesn’t properly implement hw.usermem.
    Also it needs to read hw.physmem64 instead of hw.physmem with sysctl

commit c9e7b8cadfcbfb877f180a9c89ee9d87f271d17c
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Sun Dec 19 17:50:24 2021 +0100

    Why doesn’t `last' return the last /element/?

commit f2248810132813191ebdd11f739d24bcc49f3165
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Sun Dec 19 17:46:33 2021 +0100

    Fix RAM detection on NetBSD
2021-12-19 18:35:59 +01:00
3 changed files with 114 additions and 27 deletions

View File

@@ -22,6 +22,7 @@ macOS. PR are welcome if you want to fix that!
* Table of Contents :TOC_2_gh: * Table of Contents :TOC_2_gh:
- [[#introduction][Introduction]] - [[#introduction][Introduction]]
- [[#recent-breaking-changes][Recent Breaking Changes]] - [[#recent-breaking-changes][Recent Breaking Changes]]
- [[#081][~0.8.1~]]
- [[#070][~0.7.0~]] - [[#070][~0.7.0~]]
- [[#installation][Installation]] - [[#installation][Installation]]
- [[#customizing][Customizing]] - [[#customizing][Customizing]]
@@ -33,6 +34,11 @@ macOS. PR are welcome if you want to fix that!
- [[#license][License]] - [[#license][License]]
* Recent Breaking Changes * Recent Breaking Changes
** ~0.8.1~
Version ~0.8.1~ removes the optional argument ~REMOTE~ from
~eshell-info-banner--executable-find~. It now only acts according to the
users preference set with ~eshell-info-banner-tramp-aware~.
** ~0.7.0~ ** ~0.7.0~
Version ~0.7.0~ renames several functions to conform with the Elisp Version ~0.7.0~ renames several functions to conform with the Elisp
Coding Conventions. Coding Conventions.

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.0 ;; Version: 0.8.4
;; 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
@@ -65,7 +65,11 @@
(eval-when-compile (eval-when-compile
(defconst eshell-info-banner--macos-versions (defconst eshell-info-banner--macos-versions
'(("10.4" . "Mac OS X Tiger") '(("10.0" . "Mac OS X Cheetah")
("10.1" . "Mac OS X Puma")
("10.2" . "Mac OS X Jaguar")
("10.3" . "Mac OS X Panther")
("10.4" . "Mac OS X Tiger")
("10.5" . "Mac OS X Leopard") ("10.5" . "Mac OS X Leopard")
("10.6" . "Mac OS X Snow Leopard") ("10.6" . "Mac OS X Snow Leopard")
("10.7" . "Mac OS X Lion") ("10.7" . "Mac OS X Lion")
@@ -84,9 +88,15 @@
("11.3" . "macOS Big Sur") ("11.3" . "macOS Big Sur")
("11.4" . "macOS Big Sur") ("11.4" . "macOS Big Sur")
("11.5" . "macOS Big Sur") ("11.5" . "macOS Big Sur")
("11.6" . "macOS Big Sur")) ("11.6" . "macOS Big Sur")
("12.0" . "macOS Monterey")
("12.1" . "macOS Monterey")
("12.2" . "macOS Monterey"))
"Versions of OSX and macOS and their name.")) "Versions of OSX and macOS and their name."))
(defconst eshell-info-banner--posix-shells '("bash" "zsh" "sh")
"List of POSIX-compliant shells to run external commands through.")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Custom variables ; ; Custom variables ;
@@ -140,18 +150,18 @@
:type 'list :type 'list
:version "0.3.0") :version "0.3.0")
(defun eshell-info-banner--executable-find (program &optional remote) (defun eshell-info-banner--executable-find (program)
"Find PROGRAM executable, possibly on a REMOTE machine. "Find PROGRAM executable, possibly on a remote machine.
This is a wrapper around `executable-find' in order to avoid This is a wrapper around `executable-find' in order to avoid
issues with older versions of the functions only accepting one issues with older versions of the functions only accepting one
argument." argument. `executable-find's remote argument has the value of
`eshell-info-banner-tramp-aware'."
(if (version< emacs-version "27.1") (if (version< emacs-version "27.1")
(let ((default-directory (if (and eshell-info-banner-tramp-aware (let ((default-directory (if eshell-info-banner-tramp-aware
remote)
default-directory default-directory
"~"))) "~")))
(executable-find program)) (executable-find program))
(executable-find program remote))) (executable-find program eshell-info-banner-tramp-aware)))
(defcustom eshell-info-banner-duf-executable "duf" (defcustom eshell-info-banner-duf-executable "duf"
"Path to the `duf' executable." "Path to the `duf' executable."
@@ -215,13 +225,21 @@ argument."
(defun eshell-info-banner--shell-command-to-string (command) (defun eshell-info-banner--shell-command-to-string (command)
"Execute shell command COMMAND and return its output as a string. "Execute shell command COMMAND and return its output as a string.
Ensures the command is ran with LANG=C." Ensures the command is ran with LANG=C."
(shell-command-to-string (format "LANG=C %s" command))) (let ((shell (or (seq-find (lambda (shell)
(eshell-info-banner--executable-find shell))
eshell-info-banner--posix-shells)
"sh")))
(with-temp-buffer
(call-process shell nil t nil "-c" (concat "LANG=C " command))
(buffer-string))))
(defun eshell-info-banner--progress-bar-without-prefix (bar-length used total &optional newline) (defun eshell-info-banner--progress-bar-without-prefix (bar-length used total &optional newline)
"Display a progress bar without its prefix. "Display a progress bar without its prefix.
Display a progress bar of BAR-LENGTH length, followed by an Display a progress bar of BAR-LENGTH length, followed by an
indication of how full the memory is with a human readable USED indication of how full the memory is with a human readable USED
and TOTAL size." and TOTAL size.
Optional argument NEWLINE: Whether to output a newline at the end
of the progress bar."
(let ((percentage (if (= used 0) (let ((percentage (if (= used 0)
0 0
(/ (* 100 used) total)))) (/ (* 100 used) total))))
@@ -451,19 +469,80 @@ 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. "Get the output of COMMAND corresponding to memory information.
Compatible with Darwin and FreeBSD at least." This function is to be only used on platforms which support sysctl."
(let* ((command-to-mem (lambda (command) (string-to-number
(string-to-number (s-trim
(car (last
(split-string (eshell-info-banner--shell-command-to-string command)
" "
t))))))
(defun eshell-info-banner--get-memory-netbsd ()
"Get memory usage for NetBSD systems.
See `eshell-info-banner--get-memory'."
(let* ((total (eshell-info-banner--get-memory-unix-command-to-mem "sysctl hw.physmem64"))
(used (- total
(* 1024 (string-to-number
(s-trim (s-trim
(cadr (with-temp-buffer
(split-string (eshell-info-banner--shell-command-to-string command) (insert-file-contents-literally "/proc/meminfo")
" " (save-match-data
t))))))) (string-match (rx bol
`(("RAM" "MemFree:"
,(apply command-to-mem '("sysctl hw.physmem")) (* blank)
,(apply command-to-mem '("sysctl hw.usermem")))))) (group (+ digit))
(* blank)
"kB")
(buffer-string))
(substring-no-properties (buffer-string)
(match-beginning 1)
(match-end 1))))))))))
`(("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."
@@ -580,7 +659,9 @@ The usage of `eshell-info-banner-warning-percentage' and
thought of as the “percentage of discharge” of the computer. thought of as the “percentage of discharge” of the computer.
Thus, setting the warning at 75% will be translated as showing Thus, setting the warning at 75% will be translated as showing
the warning face with a battery level of 25% or less." the warning face with a battery level of 25% or less."
(let ((battery-level (when (file-readable-p "/sys/") (battery)))) (let ((battery-level (unless (and (equal system-type 'gnu/linux)
(not (file-readable-p "/sys/")))
(battery))))
(if (or (null battery-level) (if (or (null battery-level)
(string= battery-level "Battery status not available") (string= battery-level "Battery status not available")
(string-match-p (regexp-quote "N/A") battery-level)) (string-match-p (regexp-quote "N/A") battery-level))
@@ -662,7 +743,7 @@ If RELEASE-FILE is nil, use '/etc/os-release'."
(insert-file-contents (concat prefix "/bedrock/etc/bedrock-release")) (insert-file-contents (concat prefix "/bedrock/etc/bedrock-release"))
(buffer-string)))) (buffer-string))))
;; Proxmox ;; Proxmox
((eshell-info-banner--executable-find "pveversion" eshell-info-banner-tramp-aware) ((eshell-info-banner--executable-find "pveversion")
(let ((distro (eshell-info-banner--shell-command-to-string "pveversion"))) (let ((distro (eshell-info-banner--shell-command-to-string "pveversion")))
(save-match-data (save-match-data
(string-match "/\\([^/]+\\)/" distro) (string-match "/\\([^/]+\\)/" distro)
@@ -670,9 +751,9 @@ If RELEASE-FILE is nil, use '/etc/os-release'."
(substring-no-properties distro (substring-no-properties distro
(match-beginning 1) (match-beginning 1)
(match-end 1)))))) (match-end 1))))))
((eshell-info-banner--executable-find "hostnamectl" eshell-info-banner-tramp-aware) ((eshell-info-banner--executable-find "hostnamectl")
(eshell-info-banner--get-os-information-from-hostnamectl)) (eshell-info-banner--get-os-information-from-hostnamectl))
((eshell-info-banner--executable-find "lsb_release" eshell-info-banner-tramp-aware) ((eshell-info-banner--executable-find "lsb_release")
(eshell-info-banner--get-os-information-from-lsb-release)) (eshell-info-banner--get-os-information-from-lsb-release))
((file-exists-p (concat prefix "/etc/os-release")) ((file-exists-p (concat prefix "/etc/os-release"))
(eshell-info-banner--get-os-information-from-release-file)) (eshell-info-banner--get-os-information-from-release-file))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 54 KiB