2 Commits
0.8.3 ... 0.7.2

Author SHA1 Message Date
955a27f606 Fix value type issue in `eshell-info-banner--get-memory-gnu' 2021-11-15 10:05:46 +01:00
494a90dcb1 Update README, package is now in melpa
Update recipes for installing package

Add MELPA badge
2021-11-14 19:01:34 +01:00
2 changed files with 103 additions and 252 deletions

View File

@@ -2,14 +2,13 @@
#+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 (using the nord theme from ~doom-themes~) #+caption: Screenshot of the default Eshell information banner
[[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
@@ -22,23 +21,15 @@ 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.
@@ -96,8 +87,10 @@ 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
@@ -152,19 +145,7 @@ 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
@@ -199,4 +180,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 the [[file:LICENSE][LICENSE]] file. can find the full text in [[file:LICENSE.md][LICENSE.md]].

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.8.3 ;; Version: 0.7.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://labs.phundrak.com/phundrak/eshell-info-banner.el
;; This file is not part of GNU Emacs ;; This file is not part of GNU Emacs
@@ -65,11 +65,7 @@
(eval-when-compile (eval-when-compile
(defconst eshell-info-banner--macos-versions (defconst eshell-info-banner--macos-versions
'(("10.0" . "Mac OS X Cheetah") '(("10.4" . "Mac OS X Tiger")
("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")
@@ -86,17 +82,9 @@
("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")
("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 ;
@@ -150,19 +138,6 @@
: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
@@ -170,24 +145,15 @@ argument. `executable-find's remote argument has the value of
:safe #'stringp :safe #'stringp
:version "0.5.0") :version "0.5.0")
(defcustom eshell-info-banner-use-duf (defcustom eshell-info-banner-use-duf (if (executable-find eshell-info-banner-duf-executable)
(if (eshell-info-banner--executable-find eshell-info-banner-duf-executable) t
t nil)
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 ;
@@ -215,7 +181,7 @@ argument. `executable-find's remote argument has the value of
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Macros and Utilities ; ; Macros ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmacro eshell-info-banner--with-face (str &rest properties) (defmacro eshell-info-banner--with-face (str &rest properties)
@@ -225,32 +191,7 @@ argument. `executable-find's remote argument has the value of
(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."
(let ((shell (or (seq-find (lambda (shell) (shell-command-to-string (format "LANG=C %s" command)))
(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" "")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -263,11 +204,11 @@ and TOTAL size."
"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 (eshell-info-banner--executable-find "uptime") (when (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" "unknown"))) '("invalid" "illegal")))
(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
@@ -347,8 +288,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 total :size (file-size-human-readable total)
:used used :used (file-size-human-readable used)
:percent percent))) :percent percent)))
partitions))) partitions)))
@@ -360,29 +301,28 @@ 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 (cdr (split-string (eshell-info-banner--shell-command-to-string "df -l") (let ((partitions (split-string (eshell-info-banner--shell-command-to-string "df -lH")
(regexp-quote "\n") (regexp-quote "\n")
t)))) t)))
(cl-remove-if #'null (seq-filter (lambda (partition)
(mapcar (lambda (partition) (let* ((partition (split-string partition " " t))
(let* ((partition (split-string partition " " t)) (filesystem (nth 0 partition))
(filesystem (nth 0 partition)) (size (nth 1 partition))
(size (string-to-number (nth 1 partition))) (used (nth 2 partition))
(used (string-to-number (nth 2 partition))) (percent (nth 4 partition))
(percent (nth 4 partition)) (mount (nth mount-position partition)))
(mount (nth mount-position partition))) (unless (seq-some (lambda (prefix)
(when (seq-some (lambda (prefix) (string-prefix-p prefix filesystem t))
(string-prefix-p prefix filesystem t)) eshell-info-banner-partition-prefixes)
eshell-info-banner-partition-prefixes) (make-eshell-info-banner--mounted-partitions
(make-eshell-info-banner--mounted-partitions :path (if (> (length mount) eshell-info-banner-shorten-path-from)
:path (if (> (length mount) eshell-info-banner-shorten-path-from) (eshell-info-banner--abbr-path mount t)
(eshell-info-banner--abbr-path mount t) mount)
mount) :size size
:size size :used used
:used used :percent (string-to-number
:percent (string-to-number (string-trim-left percent (regexp-quote "%")))))))
(string-trim-left percent (regexp-quote "%"))))))) partitions)))
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.
@@ -433,16 +373,20 @@ 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'."
(concat (s-pad-right text-padding (let ((percentage (eshell-info-banner--mounted-partitions-percent partition)))
"." (concat (s-pad-right text-padding
(eshell-info-banner--with-face "."
(eshell-info-banner--mounted-partitions-path partition) (eshell-info-banner--with-face
:weight 'bold)) (eshell-info-banner--mounted-partitions-path partition)
": " :weight 'bold))
(eshell-info-banner--progress-bar-without-prefix ": "
bar-length (eshell-info-banner--progress-bar bar-length percentage)
(eshell-info-banner--mounted-partitions-used partition) (format " %6s / %-6s (%3s%%)"
(eshell-info-banner--mounted-partitions-size partition)))) (eshell-info-banner--mounted-partitions-used 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.
@@ -467,78 +411,19 @@ For TEXT-PADDING and BAR-LENGTH, see the documentation of
"\n" "\n"
t))) t)))
(defun eshell-info-banner--get-memory-unix-command-to-mem (command)
(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
(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))))))))))
`(("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 () (defun eshell-info-banner--get-memory-unix ()
"Get memory usage for UNIX systems." "Get memory usage for UNIX systems.
(cond ((and (equal system-type 'berkeley-unix) Compatible with Darwin and FreeBSD at least."
(string-match-p "NetBSD" (eshell-info-banner--shell-command-to-string "uname"))) (let* ((command-to-mem (lambda (command)
(eshell-info-banner--get-memory-netbsd)) (string-to-number
((equal system-type 'darwin) (s-trim
(eshell-info-banner--get-memory-darwin)) (cadr
(t (split-string (eshell-info-banner--shell-command-to-string command)
(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"))) t)))))))
`(("RAM" ,total ,used)))))) `(("RAM"
,(apply command-to-mem '("sysctl hw.physmem"))
,(apply command-to-mem '("sysctl hw.usermem"))))))
(defun eshell-info-banner--get-memory-windows () (defun eshell-info-banner--get-memory-windows ()
"Get memory usage for Window." "Get memory usage for Window."
@@ -577,9 +462,18 @@ 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."
(concat (s-pad-right text-padding "." type) (let ((percentage (if (= used 0)
": " 0
(eshell-info-banner--progress-bar-without-prefix bar-length used total t))) (/ (* 100 used) total))))
(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.
@@ -655,11 +549,8 @@ 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 (unless (and (equal system-type 'gnu/linux) (let ((battery-level (battery)))
(not (file-readable-p "/sys/"))) (if (or (string= battery-level "Battery status not available")
(battery))))
(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
@@ -672,7 +563,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 (if (equal eshell-info-banner-file-size-flavor 'iec) 21 17) " ") (s-repeat 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)
@@ -733,27 +624,13 @@ 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
;; Bedrock Linux ((executable-find "hostnamectl" eshell-info-banner-tramp-aware)
((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))
((eshell-info-banner--executable-find "lsb_release") ((executable-find "lsb_release" eshell-info-banner-tramp-aware)
(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))
((eshell-info-banner--executable-find "shepherd") ((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)
@@ -766,10 +643,6 @@ 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")))))
@@ -814,29 +687,26 @@ 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