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
This commit is contained in:
parent
89f78f023a
commit
a2f24e4633
17
README.org
17
README.org
@ -9,7 +9,7 @@
|
|||||||
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, let’s see how it looks like:
|
words, let’s 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
|
||||||
@ -25,6 +25,8 @@ macOS. PR are welcome if you want to fix that!
|
|||||||
- [[#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 doesn’t have a battery, will this still work?]]
|
- [[#my-computer-doesnt-have-a-battery-will-this-still-work][My computer doesn’t 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]]
|
||||||
@ -89,6 +91,7 @@ There is probably a similar way to install it with pure ~straight.el~ or
|
|||||||
a PR to add some more installation instructions!
|
a PR to add some more installation instructions!
|
||||||
|
|
||||||
* 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
|
||||||
@ -143,7 +146,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
|
||||||
Don’t like the colors used by the package? They should follow by
|
Don’t 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
|
||||||
|
@ -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.7.7
|
;; Version: 0.8.0
|
||||||
;; 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
|
||||||
|
|
||||||
@ -87,33 +87,6 @@
|
|||||||
("11.6" . "macOS Big Sur"))
|
("11.6" . "macOS Big Sur"))
|
||||||
"Versions of OSX and macOS and their name."))
|
"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)
|
|
||||||
"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."
|
|
||||||
(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 ;
|
; Custom variables ;
|
||||||
@ -167,6 +140,19 @@ Ensures the command is ran with LANG=C."
|
|||||||
:type 'list
|
:type 'list
|
||||||
:version "0.3.0")
|
:version "0.3.0")
|
||||||
|
|
||||||
|
(defun eshell-info-banner--executable-find (program &optional remote)
|
||||||
|
"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."
|
||||||
|
(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)))
|
||||||
|
|
||||||
(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
|
||||||
@ -184,6 +170,14 @@ Ensures the command is ran with LANG=C."
|
|||||||
: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 ;
|
||||||
@ -209,6 +203,39 @@ Ensures the command is ran with LANG=C."
|
|||||||
"Face for `eshell-info-banner' progress bars displaying critical levels."
|
"Face for `eshell-info-banner' progress bars displaying critical levels."
|
||||||
:group 'eshell-info-banner)
|
:group 'eshell-info-banner)
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Macros and Utilities ;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
(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)))
|
||||||
|
|
||||||
|
(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" "")))))
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; Internal functions ;
|
; Internal functions ;
|
||||||
@ -304,8 +331,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)))
|
||||||
|
|
||||||
@ -317,15 +344,15 @@ 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 -lH")
|
(let ((partitions (cdr (split-string (eshell-info-banner--shell-command-to-string "df -l")
|
||||||
(regexp-quote "\n")
|
(regexp-quote "\n")
|
||||||
t))))
|
t))))
|
||||||
(cl-remove-if #'null
|
(cl-remove-if #'null
|
||||||
(mapcar (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)))
|
||||||
(when (seq-some (lambda (prefix)
|
(when (seq-some (lambda (prefix)
|
||||||
@ -390,20 +417,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.
|
||||||
@ -479,18 +502,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.
|
||||||
@ -581,7 +595,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)
|
||||||
@ -723,26 +737,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
|
||||||
|
Loading…
Reference in New Issue
Block a user