18 Commits
0.7.2 ... 0.8.1

Author SHA1 Message Date
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
a2f24e4633 Merge feature/file-size-flavor into master
commit 31684ffc39217b55f775bc35b7409baf2d394bcc
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Sun Dec 19 17:15:39 2021 +0100

    Fix usage of wrong types

    Use numbers and not human-readable file sizes

commit 4627e491bff2257cf37136f00fcd2b0d2bae7279
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Sun Dec 19 17:11:10 2021 +0100

    Remove unused function

commit aea999276baad7112feb3e7868be4881af362240
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Sun Dec 19 17:11:00 2021 +0100

    Fix undefined function

commit 8afaabd33f1e7a7f0d991b72a1e4f8cb492c153b
Author: Lucien Cartier-Tilet <lucien@phundrak.com>
Date:   Sun Dec 19 16:53:16 2021 +0100

    Introduce `eshell-info-banner-file-size-flavor' custom option

    This custom variable can hold three different values:
    - nil
    - si
    - iec
    This value is passed to `file-size-human-readable', see its
    documentation for more information on the effect of this variable.

    Since the value `iec' introduces an additional character in the size
    displayed, some code is reorganized in order to keep the banner’s size
    by reducing the length of the progress bar.

    Some duplicate code is also merged in the new
    `eshell-info-banner--progress-bar-without-prefix' function.

    Update the README to reflect these changes.

    The `Customizing' heading is now separated in two:
    - one subheading for custom variables
    - one subheading for faces
2021-12-19 17:19:42 +01:00
89f78f023a Fix uptime detection on NetBSD 2021-12-19 13:48:34 +01:00
6ec3280a8d Add documentation on new function 2021-12-19 00:17:27 +01:00
257ece43e6 Fix extra argument for executable-find with older versions of Emacs 2021-12-19 00:15:06 +01:00
0c9e6de3ee Add Android Support 2021-12-18 18:46:11 +01:00
76d87e4325 Fix error when directory /sys is not readable by the user 2021-12-18 17:48:26 +01:00
6e90f02988 Bump version, change homepage 2021-12-18 16:31:27 +01:00
08d7bc42da Add Melpa Stable badge 2021-12-18 16:30:27 +01:00
c8073faa88 Add support for Bedrock Linux and Proxmox 2021-12-18 16:24:32 +01:00
9b75d19451 Add new macOS Big Sur versions 2021-11-19 19:06:43 +01:00
81181090df Bump version 2021-11-19 18:55:26 +01:00
0bd70d0d0f Fix df-related code 2021-11-19 18:38:24 +01:00
312f1e3da3 Update link in REAMDE 2021-11-15 10:14:29 +01:00
a43818569d Fix value type issue in `eshell-info-banner--get-memory-gnu' 2021-11-15 10:14:29 +01:00
517b9d705c Update README, package is now in melpa
Update recipes for installing package

Add MELPA badge
2021-11-15 10:14:29 +01:00
2 changed files with 197 additions and 97 deletions

View File

@@ -2,13 +2,14 @@
#+author: Lucien Cartier-Tilet #+author: Lucien Cartier-Tilet
#+email: lucien@phundrak.com #+email: lucien@phundrak.com
[[https://melpa.org/#/eshell-info-banner][file:https://melpa.org/packages/eshell-info-banner-badge.svg]] [[https://melpa.org/#/eshell-info-banner][file:https://melpa.org/packages/eshell-info-banner-badge.svg]]
[[https://stable.melpa.org/#/eshell-info-banner][file:https://stable.melpa.org/packages/eshell-info-banner-badge.svg]]
* Introduction * Introduction
~eshell-info-banner.el~ is a utility for creating an informative banner, ~eshell-info-banner.el~ is a utility for creating an informative banner,
akin to ~fish_greeting~ but for Eshell. But an image is worth a thousand akin to ~fish_greeting~ but for Eshell. But an image is worth a thousand
words, lets see how it looks like: words, lets see how it looks like:
#+caption: Screenshot of the default Eshell information banner #+caption: Screenshot of the default Eshell information banner (using the nord theme from ~doom-themes~)
[[file:img/screenshot.png]] [[file:img/screenshot.png]]
This will be displayed every time you open a new Eshell instance, or This will be displayed every time you open a new Eshell instance, or
@@ -21,15 +22,23 @@ 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]]
- [[#custom-variables][Custom Variables]]
- [[#faces][Faces]]
- [[#my-computer-doesnt-have-a-battery-will-this-still-work][My computer doesnt have a battery, will this still work?]] - [[#my-computer-doesnt-have-a-battery-will-this-still-work][My computer doesnt have a battery, will this still work?]]
- [[#advice-for-windows-users][Advice for Windows users]] - [[#advice-for-windows-users][Advice for Windows users]]
- [[#contributing][Contributing]] - [[#contributing][Contributing]]
- [[#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.
@@ -87,10 +96,8 @@ There is probably a similar way to install it with pure ~straight.el~ or
~quelpa~, but Im not knowledgable enough for that, feel free to create ~quelpa~, but Im not knowledgable enough for that, feel free to create
a PR to add some more installation instructions! a PR to add some more installation instructions!
There is currently no plans of making this package available on MELPA
or non-gnu elpa.
* Customizing * Customizing
** Custom Variables
A couple of variables can be edited by the user in order to configure A couple of variables can be edited by the user in order to configure
~eshell-info-banner.el~: ~eshell-info-banner.el~:
- ~eshell-info-banner-partition-prefixes~ :: Filter for which - ~eshell-info-banner-partition-prefixes~ :: Filter for which
@@ -145,7 +152,19 @@ A couple of variables can be edited by the user in order to configure
this custom variable. this custom variable.
Default value: ~duf~ Default value: ~duf~
- ~eshell-info-banner-file-size-flavor~ :: This variable reflects the
possible values passed to the function ~file-size-human-readable~. It
can hold one of these three values:
- ~nil~
- ~si~
- ~iec~
Since the value ~iec~ generates longer file size prefixes, progress
bars become slightly shorter. For more details on this option, see
the documentation of ~file-size-human-readable~.
Default value: ~nil~
** Faces
Dont like the colors used by the package? They should follow by Dont like the colors used by the package? They should follow by
default your theme, but you can customize the following faces: default your theme, but you can customize the following faces:
- ~eshell-info-banner-background-face~ :: Used for filling the empty - ~eshell-info-banner-background-face~ :: Used for filling the empty
@@ -180,4 +199,4 @@ See [[file:CONTRIBUTING.org]].
* License * License
~eshell-info-banner.el~ is available under the GNU GPL-3.0 license. You ~eshell-info-banner.el~ is available under the GNU GPL-3.0 license. You
can find the full text in [[file:LICENSE.md][LICENSE.md]]. can find the full text in the [[file:LICENSE][LICENSE]] file.

View File

@@ -2,9 +2,9 @@
;; 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.7.2 ;; Version: 0.8.1
;; Package-Requires: ((emacs "25.1") (f "0.20") (s "1")) ;; Package-Requires: ((emacs "25.1") (f "0.20") (s "1"))
;; Homepage: https://labs.phundrak.com/phundrak/eshell-info-banner.el ;; Homepage: https://github.com/Phundrak/eshell-info-banner.el
;; This file is not part of GNU Emacs ;; This file is not part of GNU Emacs
@@ -82,9 +82,14 @@
("11.1" . "macOS Big Sur") ("11.1" . "macOS Big Sur")
("11.2" . "macOS Big Sur") ("11.2" . "macOS Big Sur")
("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.6" . "macOS Big Sur"))
"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 ;
@@ -138,6 +143,19 @@
:type 'list :type 'list
:version "0.3.0") :version "0.3.0")
(defun eshell-info-banner--executable-find (program)
"Find PROGRAM executable, possibly on a remote machine.
This is a wrapper around `executable-find' in order to avoid
issues with older versions of the functions only accepting one
argument. `executable-find's remote argument has the value of
`eshell-info-banner-tramp-aware'."
(if (version< emacs-version "27.1")
(let ((default-directory (if eshell-info-banner-tramp-aware
default-directory
"~")))
(executable-find program))
(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."
:group 'eshell-info-banner :group 'eshell-info-banner
@@ -145,15 +163,24 @@
:safe #'stringp :safe #'stringp
:version "0.5.0") :version "0.5.0")
(defcustom eshell-info-banner-use-duf (if (executable-find eshell-info-banner-duf-executable) (defcustom eshell-info-banner-use-duf
t (if (eshell-info-banner--executable-find eshell-info-banner-duf-executable)
nil) t
nil)
"If non-nil, use `duf' instead of `df'." "If non-nil, use `duf' instead of `df'."
:group 'eshell-info-banner :group 'eshell-info-banner
:type 'boolean :type 'boolean
:safe #'booleanp :safe #'booleanp
:version "0.5.0") :version "0.5.0")
(defcustom eshell-info-banner-file-size-flavor nil
"Display sizes with IEC prefixes."
:group 'eshell-info-banner
:type '(radio (const :tag "Default" nil)
(const :tag "SI" si)
(const :tag "IEC" iec))
:version "0.8.0")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Faces ; ; Faces ;
@@ -181,7 +208,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Macros ; ; Macros and Utilities ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro eshell-info-banner--with-face (str &rest properties) (defmacro eshell-info-banner--with-face (str &rest properties)
@@ -191,7 +218,32 @@
(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)
"Display a progress bar without its prefix.
Display a progress bar of BAR-LENGTH length, followed by an
indication of how full the memory is with a human readable USED
and TOTAL size."
(let ((percentage (if (= used 0)
0
(/ (* 100 used) total))))
(concat (eshell-info-banner--progress-bar bar-length percentage)
(format (if (equal eshell-info-banner-file-size-flavor 'iec)
" %8s / %-8s (%3s%%)%s"
" %6s / %-6s (%3s%%)%s")
(file-size-human-readable used eshell-info-banner-file-size-flavor)
(file-size-human-readable total eshell-info-banner-file-size-flavor)
(eshell-info-banner--with-face
(number-to-string percentage)
:inherit (eshell-info-banner--get-color-percentage percentage))
(if newline "\n" "")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -204,11 +256,11 @@ Ensures the command is ran with LANG=C."
"Get uptime of machine if `uptime' is available. "Get uptime of machine if `uptime' is available.
If the executable `uptime' is not found, return nil." If the executable `uptime' is not found, return nil."
(when (executable-find "uptime") (when (eshell-info-banner--executable-find "uptime")
(let ((uptime-str (eshell-info-banner--shell-command-to-string "uptime -p"))) (let ((uptime-str (eshell-info-banner--shell-command-to-string "uptime -p")))
(if (not (seq-some (lambda (keyword) (if (not (seq-some (lambda (keyword)
(string-match-p keyword uptime-str)) (string-match-p keyword uptime-str))
'("invalid" "illegal"))) '("invalid" "illegal" "unknown")))
(s-chop-prefix "up " (s-trim uptime-str)) (s-chop-prefix "up " (s-trim uptime-str))
(let ((uptime-str (eshell-info-banner--shell-command-to-string "uptime"))) (let ((uptime-str (eshell-info-banner--shell-command-to-string "uptime")))
(save-match-data (save-match-data
@@ -288,8 +340,8 @@ chosen. Relies on the `duf' command."
:path (if (> (length mount-point) eshell-info-banner-shorten-path-from) :path (if (> (length mount-point) eshell-info-banner-shorten-path-from)
(eshell-info-banner--abbr-path mount-point t) (eshell-info-banner--abbr-path mount-point t)
mount-point) mount-point)
:size (file-size-human-readable total) :size total
:used (file-size-human-readable used) :used used
:percent percent))) :percent percent)))
partitions))) partitions)))
@@ -301,28 +353,29 @@ Common function between
otherwise differ solely on the position of the mount point in the otherwise differ solely on the position of the mount point in the
partition list. Its position is given by the argument partition list. Its position is given by the argument
MOUNT-POSITION." MOUNT-POSITION."
(let ((partitions (split-string (eshell-info-banner--shell-command-to-string "df -lH") (let ((partitions (cdr (split-string (eshell-info-banner--shell-command-to-string "df -l")
(regexp-quote "\n") (regexp-quote "\n")
t))) t))))
(seq-filter (lambda (partition) (cl-remove-if #'null
(let* ((partition (split-string partition " " t)) (mapcar (lambda (partition)
(filesystem (nth 0 partition)) (let* ((partition (split-string partition " " t))
(size (nth 1 partition)) (filesystem (nth 0 partition))
(used (nth 2 partition)) (size (string-to-number (nth 1 partition)))
(percent (nth 4 partition)) (used (string-to-number (nth 2 partition)))
(mount (nth mount-position partition))) (percent (nth 4 partition))
(unless (seq-some (lambda (prefix) (mount (nth mount-position partition)))
(string-prefix-p prefix filesystem t)) (when (seq-some (lambda (prefix)
eshell-info-banner-partition-prefixes) (string-prefix-p prefix filesystem t))
(make-eshell-info-banner--mounted-partitions eshell-info-banner-partition-prefixes)
:path (if (> (length mount) eshell-info-banner-shorten-path-from) (make-eshell-info-banner--mounted-partitions
(eshell-info-banner--abbr-path mount t) :path (if (> (length mount) eshell-info-banner-shorten-path-from)
mount) (eshell-info-banner--abbr-path mount t)
:size size mount)
:used used :size size
:percent (string-to-number :used used
(string-trim-left percent (regexp-quote "%"))))))) :percent (string-to-number
partitions))) (string-trim-left percent (regexp-quote "%")))))))
partitions))))
(defun eshell-info-banner--get-mounted-partitions-gnu () (defun eshell-info-banner--get-mounted-partitions-gnu ()
"Detect mounted partitions on a Linux system. "Detect mounted partitions on a Linux system.
@@ -373,20 +426,16 @@ Return detected partitions as a list of structs."
For TEXT-PADDING and BAR-LENGTH, see the documentation of For TEXT-PADDING and BAR-LENGTH, see the documentation of
`eshell-info-banner--display-memory'." `eshell-info-banner--display-memory'."
(let ((percentage (eshell-info-banner--mounted-partitions-percent partition))) (concat (s-pad-right text-padding
(concat (s-pad-right text-padding "."
"." (eshell-info-banner--with-face
(eshell-info-banner--with-face (eshell-info-banner--mounted-partitions-path partition)
(eshell-info-banner--mounted-partitions-path partition) :weight 'bold))
:weight 'bold)) ": "
": " (eshell-info-banner--progress-bar-without-prefix
(eshell-info-banner--progress-bar bar-length percentage) bar-length
(format " %6s / %-6s (%3s%%)" (eshell-info-banner--mounted-partitions-used partition)
(eshell-info-banner--mounted-partitions-used partition) (eshell-info-banner--mounted-partitions-size partition))))
(eshell-info-banner--mounted-partitions-size partition)
(eshell-info-banner--with-face
(number-to-string percentage)
:inherit (eshell-info-banner--get-color-percentage percentage))))))
(defun eshell-info-banner--display-partitions (text-padding bar-length) (defun eshell-info-banner--display-partitions (text-padding bar-length)
"Display the detected mounted partitions of the system. "Display the detected mounted partitions of the system.
@@ -417,13 +466,32 @@ Compatible with Darwin and FreeBSD at least."
(let* ((command-to-mem (lambda (command) (let* ((command-to-mem (lambda (command)
(string-to-number (string-to-number
(s-trim (s-trim
(cadr (car (last
(split-string (eshell-info-banner--shell-command-to-string command) (split-string (eshell-info-banner--shell-command-to-string command)
" " " "
t))))))) t)))))))
`(("RAM" (netbsdp (and (equal system-type 'berkeley-unix)
,(apply command-to-mem '("sysctl hw.physmem")) (string-match-p "NetBSD" (eshell-info-banner--shell-command-to-string "uname"))))
,(apply command-to-mem '("sysctl hw.usermem")))))) (total (apply command-to-mem `(,(if netbsdp "sysctl hw.physmem64" "sysctl hw.physmem"))))
(used (if netbsdp
(- total
(* 1024 (string-to-number
(s-trim
(with-temp-buffer
(insert-file-contents-literally "/proc/meminfo")
(save-match-data
(string-match (rx bol
"MemFree:"
(* blank)
(group (+ digit))
(* blank)
"kB")
(buffer-string))
(substring-no-properties (buffer-string)
(match-beginning 1)
(match-end 1))))))))
(apply 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."
@@ -462,18 +530,9 @@ be displayed on the far right.
`BAR-LENGTH' determines the length of the progress bar to be `BAR-LENGTH' determines the length of the progress bar to be
displayed." displayed."
(let ((percentage (if (= used 0) (concat (s-pad-right text-padding "." type)
0 ": "
(/ (* 100 used) total)))) (eshell-info-banner--progress-bar-without-prefix bar-length used total t)))
(concat (s-pad-right text-padding "." type)
": "
(eshell-info-banner--progress-bar bar-length percentage)
(format " %6s / %-6s (%3s%%)\n"
(file-size-human-readable used)
(file-size-human-readable total)
(eshell-info-banner--with-face
(number-to-string percentage)
:inherit (eshell-info-banner--get-color-percentage percentage))))))
(defun eshell-info-banner--display-memory (text-padding bar-length) (defun eshell-info-banner--display-memory (text-padding bar-length)
"Display memories detected on your system. "Display memories detected on your system.
@@ -549,8 +608,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 (battery))) (let ((battery-level (when (file-readable-p "/sys/") (battery))))
(if (or (string= battery-level "Battery status not available") (if (or (null battery-level)
(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))
"" ""
(let ((percentage (save-match-data (let ((percentage (save-match-data
@@ -563,7 +623,7 @@ the warning face with a battery level of 25% or less."
(eshell-info-banner--progress-bar bar-length (eshell-info-banner--progress-bar bar-length
percentage percentage
t) t)
(s-repeat 17 " ") (s-repeat (if (equal eshell-info-banner-file-size-flavor 'iec) 21 17) " ")
(format "(%3s%%)\n" (format "(%3s%%)\n"
(eshell-info-banner--with-face (eshell-info-banner--with-face
(number-to-string percentage) (number-to-string percentage)
@@ -624,13 +684,27 @@ If RELEASE-FILE is nil, use '/etc/os-release'."
"See `eshell-info-banner--get-os-information'." "See `eshell-info-banner--get-os-information'."
(let ((prefix (if eshell-info-banner-tramp-aware (file-remote-p default-directory) ""))) (let ((prefix (if eshell-info-banner-tramp-aware (file-remote-p default-directory) "")))
`(,(cond `(,(cond
((executable-find "hostnamectl" eshell-info-banner-tramp-aware) ;; Bedrock Linux
((file-exists-p (concat prefix "/bedrock/etc/bedrock-release"))
(s-trim (with-temp-buffer
(insert-file-contents (concat prefix "/bedrock/etc/bedrock-release"))
(buffer-string))))
;; Proxmox
((eshell-info-banner--executable-find "pveversion")
(let ((distro (eshell-info-banner--shell-command-to-string "pveversion")))
(save-match-data
(string-match "/\\([^/]+\\)/" distro)
(concat "Proxmox "
(substring-no-properties distro
(match-beginning 1)
(match-end 1))))))
((eshell-info-banner--executable-find "hostnamectl")
(eshell-info-banner--get-os-information-from-hostnamectl)) (eshell-info-banner--get-os-information-from-hostnamectl))
((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))
((executable-find "shepherd") ((eshell-info-banner--executable-find "shepherd")
(let ((distro (car (s-lines (eshell-info-banner--shell-command-to-string "guix -V"))))) (let ((distro (car (s-lines (eshell-info-banner--shell-command-to-string "guix -V")))))
(save-match-data (save-match-data
(string-match "\\([0-9\\.]+\\)" distro) (string-match "\\([0-9\\.]+\\)" distro)
@@ -643,6 +717,10 @@ If RELEASE-FILE is nil, use '/etc/os-release'."
(s-trim (with-temp-buffer (s-trim (with-temp-buffer
(process-file "uname" nil t nil "-s") (process-file "uname" nil t nil "-s")
(buffer-string))))) (buffer-string)))))
((and (file-exists-p (concat prefix "/system/app"))
(file-exists-p (concat prefix "/system/priv-app")))
(concat "Android "
(s-trim (eshell-info-banner--shell-command-to-string "getprop ro.build.version.release"))))
(t "Unknown")) (t "Unknown"))
. .
,(s-trim (eshell-info-banner--shell-command-to-string "uname -rs"))))) ,(s-trim (eshell-info-banner--shell-command-to-string "uname -rs")))))
@@ -687,26 +765,29 @@ build number)."
(defun eshell-info-banner () (defun eshell-info-banner ()
"Banner for Eshell displaying system information." "Banner for Eshell displaying system information."
(let* ((default-directory (if eshell-info-banner-tramp-aware default-directory "~")) (let* ((default-directory (if eshell-info-banner-tramp-aware default-directory "~"))
(system-info (eshell-info-banner--get-os-information)) (system-info (eshell-info-banner--get-os-information))
(os (car system-info)) (os (car system-info))
(kernel (cdr system-info)) (kernel (cdr system-info))
(hostname (if eshell-info-banner-tramp-aware (hostname (if eshell-info-banner-tramp-aware
(or (file-remote-p default-directory 'host) (system-name)) (or (file-remote-p default-directory 'host) (system-name))
(system-name))) (system-name)))
(uptime (eshell-info-banner--get-uptime)) (uptime (eshell-info-banner--get-uptime))
(partitions (eshell-info-banner--get-mounted-partitions)) (partitions (eshell-info-banner--get-mounted-partitions))
(left-padding (eshell-info-banner--get-longest-path partitions)) (left-padding (eshell-info-banner--get-longest-path partitions))
(left-text (max (length os) (left-text (max (length os)
(length hostname))) (length hostname)))
(left-length (+ left-padding 2 left-text)) ; + ": " (left-length (+ left-padding 2 left-text)) ; + ": "
(right-text (+ (length "Kernel: ") (right-text (+ (length "Kernel: ")
(max (length uptime) (max (length uptime)
(length kernel)))) (length kernel))))
(tot-width (max (+ left-length right-text 3) (tot-width (max (+ left-length right-text 3)
eshell-info-banner-width)) eshell-info-banner-width))
(middle-padding (- tot-width right-text left-padding 4)) (middle-padding (- tot-width right-text left-padding 4))
(bar-length (- tot-width left-padding 4 23))) (bar-length (- tot-width left-padding 4 23))
(bar-length (if (equal eshell-info-banner-file-size-flavor 'iec)
(- bar-length 4)
bar-length)))
(concat (format "%s\n" (s-repeat tot-width eshell-info-banner-progress-bar-char)) (concat (format "%s\n" (s-repeat tot-width eshell-info-banner-progress-bar-char))
(format "%s: %s Kernel.: %s\n" (format "%s: %s Kernel.: %s\n"
(s-pad-right left-padding (s-pad-right left-padding