@@ -2,9 +2,9 @@
;; Author: Lucien Cartier-Tilet <lucien@phundrak.com>
;; Maintainer: Lucien Cartier-Tilet <lucien@phundrak.com>
;; Version: 0.7.2
;; Version: 0.7.7
;; Package-Requires: ((emacs "25.1") (f "0.20") (s "1"))
;; Homepage: https://labs.phundrak .com/p hundrak/eshell-info-banner.el
;; Homepage: https://github .com/P hundrak/eshell-info-banner.el
;; This file is not part of GNU Emacs
@@ -82,9 +82,34 @@
( " 11.1 " . " macOS Big Sur " )
( " 11.2 " . " 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. " ) )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Macros ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
( defmacro eshell-info-banner--with-face ( str &rest properties )
" Helper macro for applying face `PROPERTIES' to `STR' . "
` ( propertize , str 'face ( list ,@ properties ) ) )
( defun eshell-info-banner--executable-find ( program &optional remote )
( if ( version< emacs-version " 27.1 " )
( let ( ( default-directory ( if ( and eshell-info-banner-tramp-aware
remote )
default-directory
" ~ " ) ) )
( executable-find program ) )
( executable-find program remote ) ) )
( defun eshell-info-banner--shell-command-to-string ( command )
" Execute shell command COMMAND and return its output as a string.
Ensures the command is ran with LANG=C. "
( shell-command-to-string ( format " LANG=C %s " command ) ) )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Custom variables ;
@@ -145,9 +170,10 @@
:safe #' stringp
:version " 0.5.0 " )
( defcustom eshell-info-banner-use-duf ( if ( executable-find eshell-info-banner-duf-executable )
t
nil )
( defcustom eshell-info-banner-use-duf
( if ( eshell-info-banner--executable-find eshell-info-banner-duf-executable )
t
nil )
" If non-nil, use `duf' instead of `df' . "
:group 'eshell-info-banner
:type 'boolean
@@ -179,20 +205,6 @@
" Face for `eshell-info-banner' progress bars displaying critical levels. "
:group 'eshell-info-banner )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Macros ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
( defmacro eshell-info-banner--with-face ( str &rest properties )
" Helper macro for applying face `PROPERTIES' to `STR' . "
` ( propertize , str 'face ( list ,@ properties ) ) )
( defun eshell-info-banner--shell-command-to-string ( command )
" Execute shell command COMMAND and return its output as a string.
Ensures the command is ran with LANG=C. "
( shell-command-to-string ( format " LANG=C %s " command ) ) )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Internal functions ;
@@ -204,7 +216,7 @@ Ensures the command is ran with LANG=C."
" Get uptime of machine if `uptime' is available.
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 " ) ) )
( if ( not ( seq-some ( lambda ( keyword )
( string-match-p keyword uptime-str ) )
@@ -301,28 +313,29 @@ Common function between
otherwise differ solely on the position of the mount point in the
partition list. Its position is given by the argument
MOUNT-POSITION. "
( let ( ( partitions ( split-string ( eshell-info-banner--shell-command-to-string " df -lH " )
( regexp-quote " \n " )
t ) ) )
( seq-filter ( lambda ( partition )
( let* ( ( partition ( split-string partition " " t ) )
( filesystem ( nth 0 partition ) )
( size ( nth 1 partition ) )
( used ( nth 2 partition ) )
( percent ( nth 4 partition ) )
( mou nt ( nth mount-position partition ) ) )
( unless ( seq-some ( lambda ( prefix )
( string-prefix-p prefix filesystem t ) )
eshell-info-banner-partition-prefixes )
( make-eshell-info-banner--mounted-partitions
:path ( if ( > ( length mount ) eshell-info-banner-shor ten -path-from )
( eshell-info-banner--abbr-path mount t )
mount )
:size size
:used used
:percent ( string-to-number
( string-trim-left percent ( regexp-quote " % " ) ) ) ) ) ) )
partitions ) ) )
( let ( ( partitions ( cdr ( split-string ( eshell-info-banner--shell-command-to-string " df -lH " )
( regexp-quote " \n " )
t ) ) ) )
( cl-remove-if #' null
( mapcar ( lambda ( partition )
( let* ( ( partition ( split-string partition " " t ) )
( filesystem ( nth 0 partition ) )
( size ( nth 1 partition ) )
( used ( nth 2 partition ) )
( perce nt ( nth 4 partition ) )
( mount ( nth mount-position partition ) ) )
( when ( seq-some ( lambda ( prefix )
( string-prefix-p prefix filesystem t ) )
eshell-info-banner-partition-prefixes )
( make- eshell-info-banner--moun ted -partitions
:path ( if ( > ( length mount ) eshell-info-banner-shorten-path-from )
( eshell-info-banner--abbr-path mount t )
mount )
:size size
:used used
:percent ( string-to-number
( string-trim-left percent ( regexp-quote " % " ) ) ) ) ) ) )
partitions ) ) ) )
( defun eshell-info-banner--get-mounted-partitions-gnu ( )
" Detect mounted partitions on a Linux system.
@@ -549,8 +562,9 @@ The usage of `eshell-info-banner-warning-percentage' and
thought of as the “percentage of discharge” of the computer.
Thus, setting the warning at 75% will be translated as showing
the warning face with a battery level of 25% or less. "
( let ( ( battery-level ( battery ) ) )
( if ( or ( string= battery-level " Battery status not available " )
( let ( ( battery-level ( when ( file-readable-p " /sys/ " ) ( battery ) ) ) )
( if ( or ( null battery-level )
( string= battery-level " Battery status not available " )
( string-match-p ( regexp-quote " N/A " ) battery-level ) )
" "
( let ( ( percentage ( save-match-data
@@ -624,13 +638,27 @@ If RELEASE-FILE is nil, use '/etc/os-release'."
" See `eshell-info-banner--get-os-information' . "
( let ( ( prefix ( if eshell-info-banner-tramp-aware ( file-remote-p default-directory ) " " ) ) )
` ( , ( 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 " eshell-info-banner-tramp-aware )
( 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-tramp-aware )
( 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-tramp-aware )
( eshell-info-banner--get-os-information-from-lsb-release ) )
( ( file-exists-p ( concat prefix " /etc/os-release " ) )
( 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 " ) ) ) ) )
( save-match-data
( string-match " \\ ([0-9 \\ .]+ \\ ) " distro )
@@ -643,6 +671,10 @@ If RELEASE-FILE is nil, use '/etc/os-release'."
( s-trim ( with-temp-buffer
( process-file " uname " nil t nil " -s " )
( 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 " ) )
.
, ( s-trim ( eshell-info-banner--shell-command-to-string " uname -rs " ) ) ) ) )