12 Commits
0.8.5 ... 0.8.8

Author SHA1 Message Date
27b0be266b v0.8.8 2022-05-31 11:35:35 +02:00
663d531003 Add CI with Github Actions
Check for compatibility with all version of Emacs since Emacs 25.1

Add Cask file for managing dependencies in CI

Add badge in README for CI
2022-05-31 11:31:22 +02:00
56c31d79ff Fix erroneous dependency declaration 2022-05-31 11:16:46 +02:00
Juergen Hoetzel
8e57add6c7 Use tramp-aware shell function
Fixes wrong report of disk usage when using
‘eshell-info-banner-tramp-aware’.
2022-05-16 19:14:29 +02:00
Juergen Hoetzel
8c6e37cc61 GNU and Darwin df shows space in 1K blocks by default
Als use the "-k" parameter to enforce this block size, so that the
command does not depend on environment variables (POSIXLY_CORRECT and
BLOCKSIZE).

Fixes #21
2022-05-14 22:01:14 +02:00
53fc69b871 Clarify partition detection paragraph for Windows users 2022-04-02 19:31:30 +02:00
ce7b5f69cd Reimplement and replace s-repeat
Progressively phasing out s.el as a dependency
2022-04-02 19:21:37 +02:00
dedcb8cee5 Replace s-trim with string-trim
Progressively phasing out s.el as a dependency
2022-04-02 19:21:34 +02:00
f9490f07a1 Turns out I misunderstood what :version is for in defcustom 2022-03-29 00:06:14 +02:00
9c17e92f02 Fix macOS version detection
Now use regexes to detect the macOS version returned by
`sw_vers -productVersion`

Also add new macOS version

Fixes #18
2022-03-26 10:33:59 +01:00
247d8bf4dd Remove eval-when-compile on const variable
Fixes #20
2022-01-14 11:21:29 +01:00
d4033120c1 Evaluate eshell-info-banner-path-separator on compile 2022-01-07 12:09:44 +01:00
6 changed files with 139 additions and 74 deletions

46
.github/workflows/workflow.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
name: CI
on:
push:
pull_request:
workflow_dispatch:
jobs:
check-compatibility:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
emacs_version:
- 25.1
- 25.2
- 25.3
- 26.1
- 26.2
- 26.3
- 27.1
- 27.2
- 28.1
- snapshot
steps:
- uses: actions/checkout@v3
- uses: purcell/setup-emacs@master
with:
version: ${{ matrix.emacs_version }}
- uses: actions/cache@v2
id: cache-cask-packages
with:
path: .cask
key: cache-cask-packages-000
- uses: actions/cache@v2
id: cache-cask-executable
with:
path: ~/.cask
key: cache-cask-executable-000
- name: "Cask setup"
uses: cask/setup-cask@master
if: steps.cask-cache-executable.outputs.cache-hit != 'true'
- name: "Install Cask dependencies"
run: cask install
if: steps.cask-cache-executable.outputs.cache-hit != 'true'
- name: "Check version compatibility"
run: make all

7
Cask Normal file
View File

@@ -0,0 +1,7 @@
(source melpa)
(source gnu)
(package-file "eshell-info-banner.el")
(development
(depends-on "s"))

11
Makefile Normal file
View File

@@ -0,0 +1,11 @@
# -*- indent-tabs-mode: t -*-
export EMACS ?= $(shell which emacs)
CASK ?= $(shell which cask)
all: compile
compile:
${CASK} exec ${EMACS} -Q --script bin/compile-package.el 2>&1 | grep -A 2 -E "([Ee]rror|[Ww]arning):" && exit 1 || exit 0
.PHONY: all compile

View File

@@ -3,6 +3,7 @@
#+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]] [[https://stable.melpa.org/#/eshell-info-banner][file:https://stable.melpa.org/packages/eshell-info-banner-badge.svg]]
[[https://github.com/Phundrak/eshell-info-banner.el/actions/workflows/workflow.yml][file:https://github.com/Phundrak/eshell-info-banner.el/actions/workflows/workflow.yml/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,
@@ -189,10 +190,9 @@ line if you have one. If you dont have a battery, the only difference
is you will have one less line than laptop users. is you will have one less line than laptop users.
* Advice for Windows users * Advice for Windows users
Currently, the partitions detection is done only with the ~duf~ Currently, ~eshell-info-banner~ can only look for your partitions with
command-line utility. If you want a list of your partitions, I ~duf~. If you want a list of your partitions, I strongly encourage you
strongly encourage you to install it on your system. See to install it on your system. See [[https://github.com/muesli/duf#windows][muesli/duf]].
[[https://github.com/muesli/duf#windows]].
* Contributing * Contributing
See [[file:CONTRIBUTING.org]]. See [[file:CONTRIBUTING.org]].

1
bin/compile-package.el Normal file
View File

@@ -0,0 +1 @@
(byte-recompile-directory "." 0 'force)

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.5 ;; Version: 0.8.8
;; Package-Requires: ((emacs "25.1") (s "1")) ;; Package-Requires: ((emacs "25.1") (s "1"))
;; Homepage: https://github.com/Phundrak/eshell-info-banner.el ;; Homepage: https://github.com/Phundrak/eshell-info-banner.el
@@ -38,7 +38,7 @@
;;; Code: ;;; Code:
(require 'cl-lib) (require 'cl-lib)
(require 'f) (require 's)
(require 'em-banner) (require 'em-banner)
(require 'json) (require 'json)
(require 'seq) (require 'seq)
@@ -69,33 +69,25 @@
(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\\.0\\." . "Mac OS X Cheetah")
("10.1" . "Mac OS X Puma") ("^10\\.1\\." . "Mac OS X Puma")
("10.2" . "Mac OS X Jaguar") ("^10\\.2\\." . "Mac OS X Jaguar")
("10.3" . "Mac OS X Panther") ("^10\\.3\\." . "Mac OS X Panther")
("10.4" . "Mac OS X Tiger") ("^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")
("10.8" . "OS X Mountain Lion") ("^10\\.8\\." . "OS X Mountain Lion")
("10.9" . "OS X Mavericks") ("^10\\.9\\." . "OS X Mavericks")
("10.10" . "OS X Yosemite") ("^10\\.10\\." . "OS X Yosemite")
("10.11" . "OS X El Capitan") ("^10\\.11\\." . "OS X El Capitan")
("10.12" . "macOS Sierra") ("^10\\.12\\." . "macOS Sierra")
("10.13" . "macOS High Sierra") ("^10\\.13\\." . "macOS High Sierra")
("10.14" . "macOS Mojave") ("^10\\.14\\." . "macOS Mojave")
("10.15" . "macOS Catalina") ("^10\\.15\\." . "macOS Catalina")
("10.16" . "macOS Big Sur") ("^10\\.16\\." . "macOS Big Sur")
("11.0" . "macOS Big Sur") ("^11\\." . "macOS Big Sur")
("11.1" . "macOS Big Sur") ("^12\\." . "macOS Monterey"))
("11.2" . "macOS Big Sur")
("11.3" . "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") (defconst eshell-info-banner--posix-shells '("bash" "zsh" "sh")
@@ -110,69 +102,62 @@
"Make `eshell-info-banner' TRAMP aware." "Make `eshell-info-banner' TRAMP aware."
:group 'eshell-info-banner :group 'eshell-info-banner
:type 'boolean :type 'boolean
:safe #'booleanp :safe #'booleanp)
:version "0.3.0")
(defcustom eshell-info-banner-shorten-path-from 7 (defcustom eshell-info-banner-shorten-path-from 7
"From which length should a path be shortened?" "From which length should a path be shortened?"
:group 'eshell-info-banner :group 'eshell-info-banner
:type 'integer :type 'integer
:safe #'integer-or-marker-p :safe #'integer-or-marker-p)
:version "0.1.0")
(defcustom eshell-info-banner-width 80 (defcustom eshell-info-banner-width 80
"Width of the info banner to be shown in Eshell." "Width of the info banner to be shown in Eshell."
:group 'eshell-info-banner :group 'eshell-info-banner
:type 'integer :type 'integer
:safe #'integer-or-marker-p :safe #'integer-or-marker-p)
:version "0.1.0")
(defcustom eshell-info-banner-progress-bar-char "=" (defcustom eshell-info-banner-progress-bar-char "="
"Character to fill the progress bars with." "Character to fill the progress bars with."
:group 'eshell-info-banner :group 'eshell-info-banner
:type 'string :type 'string
:safe #'stringp :safe #'stringp)
:version "0.1.0")
(defcustom eshell-info-banner-warning-percentage 75 (defcustom eshell-info-banner-warning-percentage 75
"When to warn about a percentage." "When to warn about a percentage."
:group 'eshell-info-banner :group 'eshell-info-banner
:type 'float :type 'float
:safe #'floatp :safe #'floatp)
:version "0.1.0")
(defcustom eshell-info-banner-critical-percentage 90 (defcustom eshell-info-banner-critical-percentage 90
"When a percentage becomes critical." "When a percentage becomes critical."
:group 'eshell-info-banner :group 'eshell-info-banner
:type 'float :type 'float
:safe #'floatp :safe #'floatp)
:version "0.1.0")
(defcustom eshell-info-banner-partition-prefixes '("/dev") (defcustom eshell-info-banner-partition-prefixes '("/dev")
"List of prefixes for detecting which partitions to display." "List of prefixes for detecting which partitions to display."
:group 'eshell-info-banner :group 'eshell-info-banner
:type 'list :type 'list)
:version "0.3.0")
(defun eshell-info-banner--executable-find (program)
(defmacro 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. `executable-find's remote argument has the value of argument. `executable-find's remote argument has the value of
`eshell-info-banner-tramp-aware'." `eshell-info-banner-tramp-aware'."
(if (version< emacs-version "27.1") (if (version< emacs-version "27.1")
(let ((default-directory (if eshell-info-banner-tramp-aware `(let ((default-directory (if eshell-info-banner-tramp-aware
default-directory default-directory
"~"))) "~")))
(executable-find program)) (executable-find ,program))
(executable-find program eshell-info-banner-tramp-aware))) `(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
:type 'string :type 'string
:safe #'stringp :safe #'stringp)
:version "0.5.0")
(defcustom eshell-info-banner-use-duf (defcustom eshell-info-banner-use-duf
(if (eshell-info-banner--executable-find eshell-info-banner-duf-executable) (if (eshell-info-banner--executable-find eshell-info-banner-duf-executable)
@@ -181,16 +166,14 @@ argument. `executable-find's remote argument has the value of
"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")
(defcustom eshell-info-banner-file-size-flavor nil (defcustom eshell-info-banner-file-size-flavor nil
"Display sizes with IEC prefixes." "Display sizes with IEC prefixes."
:group 'eshell-info-banner :group 'eshell-info-banner
:type '(radio (const :tag "Default" nil) :type '(radio (const :tag "Default" nil)
(const :tag "SI" si) (const :tag "SI" si)
(const :tag "IEC" iec)) (const :tag "IEC" iec)))
:version "0.8.0")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -234,8 +217,9 @@ Ensures the command is ran with LANG=C."
eshell-info-banner--posix-shells) eshell-info-banner--posix-shells)
"sh"))) "sh")))
(with-temp-buffer (with-temp-buffer
(call-process shell nil t nil "-c" (concat "LANG=C " command)) (let ((default-directory (if eshell-info-banner-tramp-aware default-directory "~")))
(buffer-string)))) (process-file 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.
@@ -258,6 +242,14 @@ of the progress bar."
:inherit (eshell-info-banner--get-color-percentage percentage)) :inherit (eshell-info-banner--get-color-percentage percentage))
(if newline "\n" ""))))) (if newline "\n" "")))))
(defun eshell-info-banner--string-repeat (str times)
"Repeat STR for TIMES times."
(declare (pure t) (side-effect-free t))
(let (result)
(cl-dotimes (_ times)
(setq result (cons str result)))
(apply #'concat result)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Internal functions ; ; Internal functions ;
@@ -375,15 +367,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 -l") (let ((partitions (cdr (split-string (eshell-info-banner--shell-command-to-string "df -l -k")
(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 (string-to-number (nth 1 partition))) (size (* (string-to-number (nth 1 partition)) 1024))
(used (string-to-number (nth 2 partition))) (used (* (string-to-number (nth 2 partition)) 1024))
(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)
@@ -396,7 +388,7 @@ MOUNT-POSITION."
:size size :size size
:used used :used used
:percent (string-to-number :percent (string-to-number
(string-trim-left percent (regexp-quote "%"))))))) (s-chop-suffix "%" percent))))))
partitions)))) partitions))))
(defun eshell-info-banner--get-mounted-partitions-gnu () (defun eshell-info-banner--get-mounted-partitions-gnu ()
@@ -651,10 +643,12 @@ critical levels close to 0 rather than 100."
percentage))) percentage)))
(concat (concat
(eshell-info-banner--with-face "[" :weight 'bold) (eshell-info-banner--with-face "[" :weight 'bold)
(eshell-info-banner--with-face (s-repeat length-filled eshell-info-banner-progress-bar-char) (eshell-info-banner--with-face (eshell-info-banner--string-repeat eshell-info-banner-progress-bar-char
length-filled)
:weight 'bold :weight 'bold
:inherit (eshell-info-banner--get-color-percentage percentage-level)) :inherit (eshell-info-banner--get-color-percentage percentage-level))
(eshell-info-banner--with-face (s-repeat length-empty eshell-info-banner-progress-bar-char) (eshell-info-banner--with-face (eshell-info-banner--string-repeat eshell-info-banner-progress-bar-char
length-empty)
:weight 'bold :weight 'bold
:inherit 'eshell-info-banner-background-face) :inherit 'eshell-info-banner-background-face)
(eshell-info-banner--with-face "]" :weight 'bold)))) (eshell-info-banner--with-face "]" :weight 'bold))))
@@ -689,7 +683,9 @@ 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) " ") (eshell-info-banner--string-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)
@@ -795,7 +791,7 @@ If RELEASE-FILE is nil, use '/etc/os-release'."
"Get the name of the current macOS or OSX system based on its VERSION." "Get the name of the current macOS or OSX system based on its VERSION."
`(cond `(cond
,@(mapcar (lambda (major) ,@(mapcar (lambda (major)
`((string-match-p (regexp-quote ,(car major)) `((string-match-p ,(car major)
,version) ,version)
,(cdr major))) ,(cdr major)))
eshell-info-banner--macos-versions) eshell-info-banner--macos-versions)
@@ -803,7 +799,9 @@ If RELEASE-FILE is nil, use '/etc/os-release'."
(defun eshell-info-banner--get-os-information-darwin () (defun eshell-info-banner--get-os-information-darwin ()
"See `eshell-info-banner--get-os-information'." "See `eshell-info-banner--get-os-information'."
`(,(eshell-info-banner--get-macos-name (s-trim (eshell-info-banner--shell-command-to-string "sw_vers -productVersion"))) `(,(eshell-info-banner--get-macos-name
(s-trim
(eshell-info-banner--shell-command-to-string "sw_vers -productVersion")))
. .
,(s-trim (eshell-info-banner--shell-command-to-string "uname -rs")))) ,(s-trim (eshell-info-banner--shell-command-to-string "uname -rs"))))
@@ -854,7 +852,8 @@ build number)."
(bar-length (if (equal eshell-info-banner-file-size-flavor 'iec) (bar-length (if (equal eshell-info-banner-file-size-flavor 'iec)
(- bar-length 4) (- bar-length 4)
bar-length))) bar-length)))
(concat (format "%s\n" (s-repeat tot-width eshell-info-banner-progress-bar-char)) (concat (format "%s\n" (eshell-info-banner--string-repeat eshell-info-banner-progress-bar-char
tot-width))
(format "%s: %s Kernel.: %s\n" (format "%s: %s Kernel.: %s\n"
(s-pad-right left-padding (s-pad-right left-padding
"." "."
@@ -868,7 +867,8 @@ build number)."
(eshell-info-banner--display-battery left-padding bar-length) (eshell-info-banner--display-battery left-padding bar-length)
(eshell-info-banner--display-memory left-padding bar-length) (eshell-info-banner--display-memory left-padding bar-length)
(eshell-info-banner--display-partitions left-padding bar-length) (eshell-info-banner--display-partitions left-padding bar-length)
(format "\n%s\n" (s-repeat tot-width eshell-info-banner-progress-bar-char))))) (format "\n%s\n" (eshell-info-banner--string-repeat eshell-info-banner-progress-bar-char
tot-width)))))
;;;###autoload ;;;###autoload
(defun eshell-info-banner-update-banner () (defun eshell-info-banner-update-banner ()